- Resume persisted outbox jobs at startup without dropping writes when credentials are unavailable - Serialize IndexedDB revisions and guard sync completion against concurrent saves - Reconcile tombstones without reviving deleted documents and bound S3 metadata requests - Require explicit CORS configuration instead of overwriting bucket rules during connection tests - Keep ACP agents exclusive to the Design role and normalize invalid model limits
36 lines
1 KiB
Vue
36 lines
1 KiB
Vue
<script setup lang="ts">
|
|
import { onMounted } from 'vue'
|
|
import { useHead } from '@unhead/vue'
|
|
import { TooltipProvider } from 'reka-ui'
|
|
|
|
import { provideEditor, useI18n } from '@open-pencil/vue'
|
|
import AppToast from '@/components/Shell/AppToast.vue'
|
|
import SettingsDialog from '@/components/settings/SettingsDialog.vue'
|
|
import { useEditorStore } from '@/app/editor/active-store'
|
|
import { toast } from '@/app/shell/ui'
|
|
import { useAppTheme } from '@/app/shell/theme'
|
|
import { scheduleStartupUpdateCheck } from '@/app/shell/updater'
|
|
import { kickSyncEngine } from '@/app/storage/sync'
|
|
|
|
useHead({ titleTemplate: (title) => (title ? `${title} — OpenPencil` : 'OpenPencil') })
|
|
|
|
const store = useEditorStore()
|
|
const { dialogs } = useI18n()
|
|
provideEditor(store)
|
|
useAppTheme()
|
|
|
|
onMounted(() => {
|
|
toast.setupGlobalErrorHandler()
|
|
scheduleStartupUpdateCheck(dialogs)
|
|
void kickSyncEngine()
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<TooltipProvider :delay-duration="400">
|
|
<RouterView />
|
|
<SettingsDialog />
|
|
<AppToast />
|
|
</TooltipProvider>
|
|
</template>
|