From 0ef3a26f7ded46ad831ff3a7e2248dee468bb6fa Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Thu, 13 Aug 2026 22:12:24 +0800 Subject: [PATCH] feat(testing-audio): now entire audio input/output pipeline can be tested --- .../src/renderer/pages/index.vue | 12 + cspell.config.yaml | 1 + packages/electron-screen-capture/package.json | 2 +- .../audio/voice-input-session.test.ts | 8 +- .../audio/voice-input-vad-startup.test.ts | 20 + .../audio/voice-input-vad-startup.ts | 1 + packages/testing-audio/.gitignore | 1 + packages/testing-audio/README.md | 127 ++ .../long-leading-silence/case.audio.test.ts | 82 + .../cases/long-leading-silence/input.test.wav | Bin 0 -> 924750 bytes .../shared/configurations/active-card.ts | 35 + .../shared/configurations/environment.ts | 23 + .../cases/shared/configurations/index.ts | 9 + .../configurations/module-consciousness.ts | 33 + .../shared/configurations/module-hearing.ts | 46 + .../shared/configurations/module-speech.ts | 39 + .../cases/shared/configurations/onboarding.ts | 33 + .../cases/shared/configurations/provider.ts | 31 + .../cases/shared/configurations/storage.ts | 12 + .../cases/shared/interactions/chat.ts | 126 + .../shared/interactions/hearing-playground.ts | 68 + .../cases/shared/interactions/index.ts | 7 + .../interactions/streaming-transcription.ts | 20 + .../cases/shared/providers/aliyun-nls.ts | 26 + .../cases/shared/providers/index.ts | 4 + .../cases/shared/providers/openai.ts | 58 + .../case.audio.test.ts | 121 + .../single-utterance-pipeline/input.test.wav | Bin 0 -> 662478 bytes .../case.audio.test.ts | 105 + .../two-utterance-streaming/input.test.wav | Bin 0 -> 1027662 bytes packages/testing-audio/package.json | 34 + packages/testing-audio/src/describe.ts | 76 + .../testing-audio/src/expect-extend.test.ts | 28 + packages/testing-audio/src/expect-extend.ts | 100 + packages/testing-audio/src/index.ts | 10 + .../src/runtimes/prepare-electron.ts | 44 + .../testing-audio/src/runtimes/prepare-web.ts | 20 + .../testing-audio/src/setup/browser-probe.ts | 204 ++ packages/testing-audio/src/setup/session.ts | 116 + packages/testing-audio/src/types.ts | 60 + packages/testing-audio/src/types/browser.d.ts | 30 + packages/testing-audio/tsconfig.json | 25 + packages/testing-audio/vitest.config.ts | 48 + packages/vitest-plugin-fakemic/README.md | 32 + .../package.json | 12 +- .../vitest-plugin-fakemic/src/index.test.ts | 91 + packages/vitest-plugin-fakemic/src/index.ts | 420 ++++ packages/vitest-plugin-fakemic/src/runner.ts | 38 + packages/vitest-plugin-fakemic/tsconfig.json | 23 + .../vitest-plugin-fakemic/vitest.config.ts | 8 + pnpm-lock.yaml | 2023 ++++++++++++++--- pnpm-workspace.yaml | 2 +- vitest.config.ts | 1 + 53 files changed, 4204 insertions(+), 291 deletions(-) create mode 100644 packages/testing-audio/.gitignore create mode 100644 packages/testing-audio/README.md create mode 100644 packages/testing-audio/cases/long-leading-silence/case.audio.test.ts create mode 100644 packages/testing-audio/cases/long-leading-silence/input.test.wav create mode 100644 packages/testing-audio/cases/shared/configurations/active-card.ts create mode 100644 packages/testing-audio/cases/shared/configurations/environment.ts create mode 100644 packages/testing-audio/cases/shared/configurations/index.ts create mode 100644 packages/testing-audio/cases/shared/configurations/module-consciousness.ts create mode 100644 packages/testing-audio/cases/shared/configurations/module-hearing.ts create mode 100644 packages/testing-audio/cases/shared/configurations/module-speech.ts create mode 100644 packages/testing-audio/cases/shared/configurations/onboarding.ts create mode 100644 packages/testing-audio/cases/shared/configurations/provider.ts create mode 100644 packages/testing-audio/cases/shared/configurations/storage.ts create mode 100644 packages/testing-audio/cases/shared/interactions/chat.ts create mode 100644 packages/testing-audio/cases/shared/interactions/hearing-playground.ts create mode 100644 packages/testing-audio/cases/shared/interactions/index.ts create mode 100644 packages/testing-audio/cases/shared/interactions/streaming-transcription.ts create mode 100644 packages/testing-audio/cases/shared/providers/aliyun-nls.ts create mode 100644 packages/testing-audio/cases/shared/providers/index.ts create mode 100644 packages/testing-audio/cases/shared/providers/openai.ts create mode 100644 packages/testing-audio/cases/single-utterance-pipeline/case.audio.test.ts create mode 100644 packages/testing-audio/cases/single-utterance-pipeline/input.test.wav create mode 100644 packages/testing-audio/cases/two-utterance-streaming/case.audio.test.ts create mode 100644 packages/testing-audio/cases/two-utterance-streaming/input.test.wav create mode 100644 packages/testing-audio/package.json create mode 100644 packages/testing-audio/src/describe.ts create mode 100644 packages/testing-audio/src/expect-extend.test.ts create mode 100644 packages/testing-audio/src/expect-extend.ts create mode 100644 packages/testing-audio/src/index.ts create mode 100644 packages/testing-audio/src/runtimes/prepare-electron.ts create mode 100644 packages/testing-audio/src/runtimes/prepare-web.ts create mode 100644 packages/testing-audio/src/setup/browser-probe.ts create mode 100644 packages/testing-audio/src/setup/session.ts create mode 100644 packages/testing-audio/src/types.ts create mode 100644 packages/testing-audio/src/types/browser.d.ts create mode 100644 packages/testing-audio/tsconfig.json create mode 100644 packages/testing-audio/vitest.config.ts create mode 100644 packages/vitest-plugin-fakemic/README.md rename packages/{audio-input-e2e => vitest-plugin-fakemic}/package.json (57%) create mode 100644 packages/vitest-plugin-fakemic/src/index.test.ts create mode 100644 packages/vitest-plugin-fakemic/src/index.ts create mode 100644 packages/vitest-plugin-fakemic/src/runner.ts create mode 100644 packages/vitest-plugin-fakemic/tsconfig.json create mode 100644 packages/vitest-plugin-fakemic/vitest.config.ts diff --git a/apps/stage-tamagotchi/src/renderer/pages/index.vue b/apps/stage-tamagotchi/src/renderer/pages/index.vue index d489f3deb..a0f083407 100644 --- a/apps/stage-tamagotchi/src/renderer/pages/index.vue +++ b/apps/stage-tamagotchi/src/renderer/pages/index.vue @@ -598,6 +598,18 @@ function getVoiceInputGeneration(metadata?: Record) { const voiceInputSession = useVoiceInputSession(stream, { shouldUseStreamInput, + onLog(level, event, message, details) { + const output = `[Voice Input] ${event}: ${message}` + if (level === 'error') { + console.error(output, details ?? {}) + return + } + if (level === 'warn') { + console.warn(output, details ?? {}) + return + } + console.info(output, details ?? {}) + }, canStartSegment: () => enabled.value && !isVoiceInputSuppressed(), inspectBeforeTranscription: ({ metadata }) => inspectVoiceInputProviderRequestGate(getVoiceInputGeneration(metadata)), inspectAfterTranscription: ({ metadata }) => inspectVoiceInputProviderRequestGate(getVoiceInputGeneration(metadata)), diff --git a/cspell.config.yaml b/cspell.config.yaml index 0716355ec..5afe4cfc5 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -111,6 +111,7 @@ words: - esaxx - eventa - Factorio + - fakemic - feaxios - fflate - Flathub diff --git a/packages/electron-screen-capture/package.json b/packages/electron-screen-capture/package.json index 00611464e..fe5d4428d 100644 --- a/packages/electron-screen-capture/package.json +++ b/packages/electron-screen-capture/package.json @@ -51,7 +51,7 @@ }, "inlinedDependencies": { "@electron-toolkit/preload": "3.0.2", - "@moeru/eventa": "1.0.0-beta.13", + "@moeru/eventa": "1.0.0-beta.15", "async-mutex": "0.5.0", "nanoid": [ "5.1.11", diff --git a/packages/stage-ui/src/composables/audio/voice-input-session.test.ts b/packages/stage-ui/src/composables/audio/voice-input-session.test.ts index 62998b0e7..c107ea0f0 100644 --- a/packages/stage-ui/src/composables/audio/voice-input-session.test.ts +++ b/packages/stage-ui/src/composables/audio/voice-input-session.test.ts @@ -9,6 +9,7 @@ const audioRecorderMock = vi.hoisted(() => ({ })) const vadMock = vi.hoisted(() => ({ + init: vi.fn<() => Promise>(), options: undefined as { onSpeechStart?: () => void onSpeechEnd?: () => void @@ -16,6 +17,7 @@ const vadMock = vi.hoisted(() => ({ onSpeechReady?: (event: { buffer: Float32Array, duration: number }) => void minSilenceDurationMs?: number } | undefined, + start: vi.fn<() => Promise>(), })) const hearingPipelineMock = vi.hoisted(() => ({ @@ -33,9 +35,9 @@ vi.mock('../../stores/ai/models/vad', async () => { useVAD: (_workerUrl: string, options: typeof vadMock.options) => { vadMock.options = options return { - init: vi.fn(), + init: vadMock.init, dispose: vi.fn(), - start: vi.fn(), + start: vadMock.start, loaded: vue.ref(true), isSpeech: vue.ref(false), isSpeechProb: vue.ref(0), @@ -82,6 +84,8 @@ describe('useVoiceInputSession', () => { audioRecorderMock.isRecording.value = false audioRecorderMock.onStopRecordHook = undefined vadMock.options = undefined + vadMock.init.mockReset().mockResolvedValue(undefined) + vadMock.start.mockReset().mockResolvedValue(undefined) vi.useRealTimers() vi.unstubAllGlobals() vi.clearAllMocks() diff --git a/packages/stage-ui/src/composables/audio/voice-input-vad-startup.test.ts b/packages/stage-ui/src/composables/audio/voice-input-vad-startup.test.ts index 0bf418b9a..981fbd236 100644 --- a/packages/stage-ui/src/composables/audio/voice-input-vad-startup.test.ts +++ b/packages/stage-ui/src/composables/audio/voice-input-vad-startup.test.ts @@ -3,6 +3,26 @@ import { describe, expect, it, vi } from 'vitest' import { startVoiceInputVadDetectionSafely } from './voice-input-vad-startup' describe('voice input VAD startup', () => { + it('reports readiness after VAD connects to the microphone stream', async () => { + const log = vi.fn() + const start = vi.fn().mockResolvedValue(undefined) + + await expect(startVoiceInputVadDetectionSafely({ + init: vi.fn().mockResolvedValue(undefined), + loaded: () => true, + start, + stream: {} as MediaStream, + log, + })).resolves.toBe(true) + + expect(start).toHaveBeenCalledOnce() + expect(log).toHaveBeenLastCalledWith( + 'info', + 'vad-ready', + 'VAD is connected to the microphone stream.', + ) + }) + it('returns false and logs when VAD initialization throws', async () => { const init = vi.fn().mockRejectedValue(new Error('vad unavailable')) const start = vi.fn() diff --git a/packages/stage-ui/src/composables/audio/voice-input-vad-startup.ts b/packages/stage-ui/src/composables/audio/voice-input-vad-startup.ts index 03f5e023c..9bd3a9714 100644 --- a/packages/stage-ui/src/composables/audio/voice-input-vad-startup.ts +++ b/packages/stage-ui/src/composables/audio/voice-input-vad-startup.ts @@ -18,6 +18,7 @@ export async function startVoiceInputVadDetectionSafely(options: VoiceInputVadSt stream: options.stream, }) await options.start(options.stream) + options.log?.('info', 'vad-ready', 'VAD is connected to the microphone stream.') return true } diff --git a/packages/testing-audio/.gitignore b/packages/testing-audio/.gitignore new file mode 100644 index 000000000..51511d1f8 --- /dev/null +++ b/packages/testing-audio/.gitignore @@ -0,0 +1 @@ +test-results/ diff --git a/packages/testing-audio/README.md b/packages/testing-audio/README.md new file mode 100644 index 000000000..24b1690bf --- /dev/null +++ b/packages/testing-audio/README.md @@ -0,0 +1,127 @@ +# Testing audio + +This package runs recorded microphone tests through the real AIRI audio pipeline. + +```text +input.wav -> virtual microphone -> VAD -> ASR -> LLM -> TTS -> playback -> UI +``` + +The package exports audio-aware `describe`, `it`, and `expect` APIs. Vitest owns the task tree and result protocol. Each project starts its configured Playwright runtime. + +`src` only owns test scheduling, runtime startup, browser probes, and matchers. Case-specific environment, storage, Provider, route, and UI operations live under `cases/shared`: + +```text +cases/shared/ + configurations/ # preflight callbacks that configure one concern + interactions/ # reusable UI operations selected by a case +``` + +## Configure a case + +The optional `preflight` field is an ordered callback array. The fake-microphone Vitest integration starts the runtime before it invokes these callbacks. Each callback receives: + +- `env`: the process environment for this case +- `runtime`: the clean Playwright runtime +- `skip`: Vitest's case-level skip control + +Every case explicitly selects the configuration it needs. Do not create one shared “complete pipeline” preflight that hides the Provider combination. + +```ts +import { describe, expect, it } from '../../src' +import { configureModuleHearing, configureOnboarding, loadCaseEnvironment } from '../shared/configurations' +import { enableChatMicrophone } from '../shared/interactions' +import { openaiAsr } from '../shared/providers' + +describe('audio input pipeline', () => { + it('transcribes a greeting', { + input: new URL('./input.test.wav', import.meta.url), + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_ASR_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_ASR_API_KEY to run this ASR case.') + if (!apiKey) + return undefined + + return { + provider: openaiAsr({ + apiKey, + baseUrl: environment.TESTING_AUDIO_ASR_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_ASR_MODEL ?? 'whisper-1', + provider: environment.TESTING_AUDIO_ASR_PROVIDER ?? 'openai-compatible-audio-transcription', + }), + captureFormat: 'wav', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio) + await expect(audio).toHaveTranscriptions([ + ['Please say hello.'], + ]) + }) +}) +``` + +A case can independently choose its VAD behavior, ASR, LLM, and TTS configuration. A configuration callback can read its own environment, write local storage, use another persistence mechanism, or deliberately leave onboarding incomplete. + +## Provider environment + +Each case selects its environment variables. `loadCaseEnvironment` uses Vite test mode to read repository, `packages/stage-ui`, and package environment files. Process variables have the highest priority. + +Put local test credentials in `packages/testing-audio/.env.test.local`. Git ignores this file. + +The OpenAI-compatible Provider helpers do not read the environment. Pass the endpoint, API key, model, and voice from the case callback. + +The included cases use these explicit variables: + +```dotenv +TESTING_AUDIO_ASR_PROVIDER=openai-compatible-audio-transcription +TESTING_AUDIO_ASR_MODEL=whisper-1 +TESTING_AUDIO_ASR_API_BASE_URL=https://api.openai.com/v1/ +TESTING_AUDIO_ASR_API_KEY=... + +TESTING_AUDIO_ASR_ALIYUN_NLS_PROVIDER=aliyun-nls-transcription +TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_ID=... +TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_SECRET=... +TESTING_AUDIO_ASR_ALIYUN_NLS_APPKEY=... + +TESTING_AUDIO_LLM_PROVIDER=openai-compatible +TESTING_AUDIO_LLM_MODEL=gpt-4o-mini +TESTING_AUDIO_LLM_API_BASE_URL=https://api.openai.com/v1/ +TESTING_AUDIO_LLM_API_KEY=... + +TESTING_AUDIO_TTS_PROVIDER=openai-compatible-audio-speech +TESTING_AUDIO_TTS_MODEL=tts-1 +TESTING_AUDIO_TTS_VOICE=alloy +TESTING_AUDIO_TTS_API_BASE_URL=https://api.openai.com/v1/ +TESTING_AUDIO_TTS_API_KEY=... +``` + +These tests send audio and text to external Providers. Each run can incur Provider charges. + +## Run the tests + +Build both targets and run all runtime projects: + +```bash +pnpm -F @proj-airi/testing-audio test:run +``` + +Use existing builds: + +```bash +pnpm -F @proj-airi/testing-audio test:existing-builds +``` + +Run one runtime project: + +```bash +pnpm -F @proj-airi/testing-audio exec vitest run --project audio-web +pnpm -F @proj-airi/testing-audio exec vitest run --project audio-electron +``` + +Use `*.audio.web.test.ts` for Web-only cases. Use `*.audio.electron.test.ts` for Electron-only cases. The `*.audio.test.ts` pattern runs in both projects. + +Do not use Vitest Browser Mode for these cases. Each task needs a case-specific Chromium fake-microphone process argument. diff --git a/packages/testing-audio/cases/long-leading-silence/case.audio.test.ts b/packages/testing-audio/cases/long-leading-silence/case.audio.test.ts new file mode 100644 index 000000000..2e74415ed --- /dev/null +++ b/packages/testing-audio/cases/long-leading-silence/case.audio.test.ts @@ -0,0 +1,82 @@ +import { describe, expect, it } from '../../src' +import { configureModuleHearing, configureOnboarding, loadCaseEnvironment } from '../shared/configurations' +import { enableChatMicrophone } from '../shared/interactions' +import { aliyunNlsAsr, openaiAsr } from '../shared/providers' + +describe('audio input pipeline', () => { + // The fixture uses the repository recording at docs/content/en/blog/DevLog-2025.03.20/assets/ashley-pitch-test.mp3. + // It has 20 seconds of leading silence and 4 seconds of trailing silence in mono 16 kHz PCM WAV format. + it('does not preserve the complete phrase after long leading silence', { + input: new URL('./input.test.wav', import.meta.url), + // This regression isolates AIRI's default VAD and one explicit ASR Provider. + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_ASR_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_ASR_API_KEY to run this ASR case.') + if (!apiKey) + return undefined + + return { + provider: openaiAsr({ + apiKey, + baseUrl: environment.TESTING_AUDIO_ASR_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_ASR_MODEL ?? 'whisper-1', + provider: environment.TESTING_AUDIO_ASR_PROVIDER ?? 'openai-compatible-audio-transcription', + }), + captureFormat: 'wav', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio) + + if (audio.transcriptionCaptureFormat) { + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + } + + // The VAD upload currently drops part of the sentence before it sends the recording to ASR. + await expect(audio).not.toHaveTranscriptions([ + ['There is no meaning to your existence, just let go.'], + ]) + }) + + it('does not preserve the complete phrase with Aliyun NLS', { + input: new URL('./input.test.wav', import.meta.url), + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const provider = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_PROVIDER + const accessKeyId = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_ID + const accessKeySecret = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_SECRET + const appKey = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_APPKEY + context.skip( + !provider || !accessKeyId || !accessKeySecret || !appKey, + 'Set all TESTING_AUDIO_ASR_ALIYUN_NLS_* variables to run this ASR case.', + ) + if (!provider || !accessKeyId || !accessKeySecret || !appKey) + return undefined + + return { + provider: aliyunNlsAsr({ provider, accessKeyId, accessKeySecret, appKey }), + captureFormat: 'pcm', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio, { readiness: 'streaming-transcription' }) + + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + await expect(audio).not.toHaveTranscriptions([ + ['There is no meaning to your existence, just let go.'], + ]) + }) +}) diff --git a/packages/testing-audio/cases/long-leading-silence/input.test.wav b/packages/testing-audio/cases/long-leading-silence/input.test.wav new file mode 100644 index 0000000000000000000000000000000000000000..0c4855621bd464c977e51bf9cb17fe477d16a689 GIT binary patch literal 924750 zcmeF&cbpT|!!Q0b>Am-4H_0wtDS}d^Nmq(A5l|2mPy`f^CP)zrh$13L7byw|2m(qk zOIu(myRe(>z4u;|%-j?A$p!E8y}$eX`+L1UJ0vqXbLxA}oY~Dej2Sj~@L-3EOz8i{ zpqX<&acKx44Bb}up$DH4!Xp|oeAw7=Hu`bc$ibtAjU7BrMURJ1TRgLC=MFE>f1Ns! z_ojU^jnG{10|5v?00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< 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

@Tiynfic~eN|CfeyaR_`Rs~*Rl(J5 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 z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U zP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZ zKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt z00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun z0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP z3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epy zpa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+ zfC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O z0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC z1t>rP3Q&Lo6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo z6rcbFC_n)UP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo6rcbFC_n)U PP=Epypa2E_mB3#C6|v-( literal 0 HcmV?d00001 diff --git a/packages/testing-audio/cases/shared/configurations/active-card.ts b/packages/testing-audio/cases/shared/configurations/active-card.ts new file mode 100644 index 000000000..44c94a3d6 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/active-card.ts @@ -0,0 +1,35 @@ +import type { AiriCard, AiriExtension } from '@proj-airi/stage-ui/types' + +import type { AudioInputSession } from '../../../src/types' + +type ActiveCardModules = Partial> + +/** Updates Provider selections that the active AIRI Card reapplies during application startup. */ +export async function configureActiveCardModules( + runtime: AudioInputSession, + modules: ActiveCardModules, +): Promise { + await runtime.runtimePage.evaluate(({ configuredModules }) => { + const serializedCards = localStorage.getItem('airi-cards') + if (!serializedCards) + throw new Error('The AIRI Card store is not initialized.') + + const activeCardId = localStorage.getItem('airi-card-active-id') ?? 'default' + const cards = JSON.parse(serializedCards) as Array<[string, AiriCard]> + const activeCard = cards.find(([cardId]) => cardId === activeCardId)?.[1] + if (!activeCard) + throw new Error(`The active AIRI Card "${activeCardId}" does not exist.`) + + const currentModules = activeCard.extensions.airi.modules + activeCard.extensions.airi.modules = { + ...currentModules, + ...(configuredModules.consciousness + ? { consciousness: configuredModules.consciousness } + : {}), + ...(configuredModules.speech + ? { speech: { ...currentModules.speech, ...configuredModules.speech } } + : {}), + } + localStorage.setItem('airi-cards', JSON.stringify(cards)) + }, { configuredModules: modules }) +} diff --git a/packages/testing-audio/cases/shared/configurations/environment.ts b/packages/testing-audio/cases/shared/configurations/environment.ts new file mode 100644 index 000000000..995ab9153 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/environment.ts @@ -0,0 +1,23 @@ +import type { AudioInputPreflightContext } from '../../../src/types' + +import { resolve } from 'node:path' + +import { findWorkspaceDir } from '@pnpm/find-workspace-dir' +import { loadEnv } from 'vite' + +/** Loads Vite test-mode environment files and applies the environment of the current case. */ +export async function loadCaseEnvironment( + environment: AudioInputPreflightContext['env'], +): Promise> { + const repositoryRoot = await findWorkspaceDir(import.meta.dirname) + if (!repositoryRoot) + throw new Error(`Unable to find the pnpm workspace from ${import.meta.dirname}`) + + const repositoryEnvironment = loadEnv('test', repositoryRoot, '') + // Shared Provider development variables live in stage-ui. These values override repository files. + const stageUiEnvironment = loadEnv('test', resolve(repositoryRoot, 'packages/stage-ui'), '') + // Audio case credentials belong to this package. These values override shared Provider variables. + const testingAudioEnvironment = loadEnv('test', resolve(repositoryRoot, 'packages/testing-audio'), '') + // The case process has the highest priority so that CI and shell values override local files. + return { ...repositoryEnvironment, ...stageUiEnvironment, ...testingAudioEnvironment, ...environment } +} diff --git a/packages/testing-audio/cases/shared/configurations/index.ts b/packages/testing-audio/cases/shared/configurations/index.ts new file mode 100644 index 000000000..cf5ad4c9e --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/index.ts @@ -0,0 +1,9 @@ +export { loadCaseEnvironment } from './environment' +export { configureModuleConsciousness } from './module-consciousness' +export type { ConsciousnessModuleConfiguration } from './module-consciousness' +export { configureModuleHearing } from './module-hearing' +export type { HearingModuleConfiguration } from './module-hearing' +export { configureModuleSpeech } from './module-speech' +export type { SpeechModuleConfiguration } from './module-speech' +export { configureOnboarding } from './onboarding' +export type { OnboardingConfiguration } from './onboarding' diff --git a/packages/testing-audio/cases/shared/configurations/module-consciousness.ts b/packages/testing-audio/cases/shared/configurations/module-consciousness.ts new file mode 100644 index 000000000..546fe23dd --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/module-consciousness.ts @@ -0,0 +1,33 @@ +import type { AudioInputPreflightCallback, AudioInputPreflightContext } from '../../../src/types' +import type { ProviderConfiguration } from './provider' + +import { configureActiveCardModules } from './active-card' +import { configureProvider } from './provider' +import { configureStorage } from './storage' + +export interface ConsciousnessModuleConfiguration { + provider: ProviderConfiguration +} + +type ConsciousnessModuleResolver = (context: AudioInputPreflightContext) => ConsciousnessModuleConfiguration | undefined | Promise + +/** Configures the consciousness module with the LLM Provider selected by one case. */ +export function configureModuleConsciousness(resolve: ConsciousnessModuleResolver): AudioInputPreflightCallback { + return async (context) => { + const configuration = await resolve(context) + if (!configuration) + return + + await configureProvider(context.runtime, configuration.provider) + await configureActiveCardModules(context.runtime, { + consciousness: { + provider: configuration.provider.id, + model: configuration.provider.model, + }, + }) + await configureStorage(context.runtime, { + 'settings/consciousness/active-provider': configuration.provider.id, + 'settings/consciousness/active-model': configuration.provider.model, + }) + } +} diff --git a/packages/testing-audio/cases/shared/configurations/module-hearing.ts b/packages/testing-audio/cases/shared/configurations/module-hearing.ts new file mode 100644 index 000000000..959011820 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/module-hearing.ts @@ -0,0 +1,46 @@ +import type { AudioCaptureFormat } from '@proj-airi/vitest-plugin-fakemic' + +import type { AudioInputPreflightCallback, AudioInputPreflightContext } from '../../../src/types' +import type { ProviderConfiguration } from './provider' + +import { configureProvider } from './provider' +import { configureStorage } from './storage' + +export interface HearingModuleConfiguration { + /** @default undefined */ + captureFormat?: AudioCaptureFormat + /** @default false */ + microphoneEnabled?: boolean + provider: ProviderConfiguration +} + +type HearingModuleResolver = (context: AudioInputPreflightContext) => HearingModuleConfiguration | undefined | Promise + +/** Configures the hearing module with the ASR Provider selected by one case. */ +export function configureModuleHearing(resolve: HearingModuleResolver): AudioInputPreflightCallback { + return async (context) => { + const configuration = await resolve(context) + if (!configuration) + return + + await configureProvider(context.runtime, configuration.provider) + const settings: Record = { + 'settings/hearing/active-provider': configuration.provider.id, + 'settings/hearing/active-model': configuration.provider.model, + 'settings/audio/input/enabled': String(configuration.microphoneEnabled ?? false), + } + + if (context.runtime.target === 'electron') { + const microphoneInput = await context.runtime.runtimePage.evaluate(async () => { + const devices = await navigator.mediaDevices.enumerateDevices() + return devices.find(device => device.kind === 'audioinput' && device.label.includes('Fake'))?.deviceId + }) + if (!microphoneInput) + throw new Error('Chromium did not expose the file-backed fake microphone.') + settings['settings/audio/input'] = microphoneInput + } + + await configureStorage(context.runtime, settings) + context.runtime.transcriptionCaptureFormat = configuration.captureFormat + } +} diff --git a/packages/testing-audio/cases/shared/configurations/module-speech.ts b/packages/testing-audio/cases/shared/configurations/module-speech.ts new file mode 100644 index 000000000..6f14f2596 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/module-speech.ts @@ -0,0 +1,39 @@ +import type { AudioInputPreflightCallback, AudioInputPreflightContext } from '../../../src/types' +import type { ProviderConfiguration } from './provider' + +import { configureActiveCardModules } from './active-card' +import { configureProvider } from './provider' +import { configureStorage } from './storage' + +export interface SpeechModuleConfiguration { + /** @default false */ + muted?: boolean + provider: ProviderConfiguration + voice: string +} + +type SpeechModuleResolver = (context: AudioInputPreflightContext) => SpeechModuleConfiguration | undefined | Promise + +/** Configures the speech module with the TTS Provider selected by one case. */ +export function configureModuleSpeech(resolve: SpeechModuleResolver): AudioInputPreflightCallback { + return async (context) => { + const configuration = await resolve(context) + if (!configuration) + return + + await configureProvider(context.runtime, configuration.provider) + await configureActiveCardModules(context.runtime, { + speech: { + provider: configuration.provider.id, + model: configuration.provider.model, + voice_id: configuration.voice, + }, + }) + await configureStorage(context.runtime, { + 'settings/speech/active-provider': configuration.provider.id, + 'settings/speech/active-model': configuration.provider.model, + 'settings/speech/voice': configuration.voice, + 'settings/speech/output-muted': String(configuration.muted ?? false), + }) + } +} diff --git a/packages/testing-audio/cases/shared/configurations/onboarding.ts b/packages/testing-audio/cases/shared/configurations/onboarding.ts new file mode 100644 index 000000000..fee77e2a7 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/onboarding.ts @@ -0,0 +1,33 @@ +import type { AudioInputPreflightCallback, AudioInputPreflightContext } from '../../../src/types' + +import { configureStorage } from './storage' + +export interface OnboardingConfiguration { + completed: boolean + /** @default false */ + skipped?: boolean +} + +type OnboardingResolver = (context: AudioInputPreflightContext) => OnboardingConfiguration | undefined | Promise + +/** Configures onboarding with values selected by one case. */ +export function configureOnboarding(resolve: OnboardingResolver): AudioInputPreflightCallback { + return async (context) => { + const configuration = await resolve(context) + if (!configuration) + return + + await configureStorage(context.runtime, { + 'onboarding/completed': String(configuration.completed), + 'onboarding/skipped': String(configuration.skipped ?? false), + }) + + if (configuration.completed || configuration.skipped) { + await new Promise(resolveWait => setTimeout(resolveWait, 1_000)) + const onboardingPages = context.runtime.electronApp + ?.windows() + .filter(page => new URL(page.url()).hash.startsWith('#/onboarding')) ?? [] + await Promise.all(onboardingPages.map(page => page.close().catch(() => undefined))) + } + } +} diff --git a/packages/testing-audio/cases/shared/configurations/provider.ts b/packages/testing-audio/cases/shared/configurations/provider.ts new file mode 100644 index 000000000..e2a7db9b7 --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/provider.ts @@ -0,0 +1,31 @@ +import type { AudioInputSession } from '../../../src/types' + +/** Provider values stored by one case preflight callback. */ +export interface ProviderConfiguration { + config: Record + definitionId: string + id: string + model: string +} + +/** Adds one Provider without replacing Providers configured by earlier callbacks. */ +export async function configureProvider(runtime: AudioInputSession, provider: ProviderConfiguration): Promise { + await runtime.page.evaluate(({ configuredProvider }) => { + const credentials = JSON.parse(localStorage.getItem('settings/credentials/providers') ?? '{}') as Record + const configured = JSON.parse(localStorage.getItem('settings/providers/configured') ?? '{}') as Record + const added = JSON.parse(localStorage.getItem('settings/providers/added') ?? '{}') as Record + + credentials[configuredProvider.id] = configuredProvider.config + configured[configuredProvider.id] = { + id: configuredProvider.id, + definitionId: configuredProvider.definitionId, + config: configuredProvider.config, + status: 'configured', + } + added[configuredProvider.id] = true + + localStorage.setItem('settings/credentials/providers', JSON.stringify(credentials)) + localStorage.setItem('settings/providers/configured', JSON.stringify(configured)) + localStorage.setItem('settings/providers/added', JSON.stringify(added)) + }, { configuredProvider: provider }) +} diff --git a/packages/testing-audio/cases/shared/configurations/storage.ts b/packages/testing-audio/cases/shared/configurations/storage.ts new file mode 100644 index 000000000..eaa2648fb --- /dev/null +++ b/packages/testing-audio/cases/shared/configurations/storage.ts @@ -0,0 +1,12 @@ +import type { AudioInputSession } from '../../../src/types' + +/** Writes AIRI settings through the storage owned by the current runtime page. */ +export async function configureStorage( + runtime: AudioInputSession, + settings: Record, +): Promise { + await runtime.runtimePage.evaluate(({ entries }) => { + for (const [key, value] of Object.entries(entries)) + localStorage.setItem(key, value) + }, { entries: settings }) +} diff --git a/packages/testing-audio/cases/shared/interactions/chat.ts b/packages/testing-audio/cases/shared/interactions/chat.ts new file mode 100644 index 000000000..589085f58 --- /dev/null +++ b/packages/testing-audio/cases/shared/interactions/chat.ts @@ -0,0 +1,126 @@ +import type { Locator } from 'playwright' + +import type { AudioInputSession } from '../../../src/types' + +import { captureStreamingTranscription } from './streaming-transcription' + +export interface EnableChatMicrophoneOptions { + /** @default 'vad' */ + readiness?: 'streaming-transcription' | 'vad' +} + +/** Enables the chat microphone through the UI owned by the selected runtime. */ +export async function enableChatMicrophone( + runtime: AudioInputSession, + options: EnableChatMicrophoneOptions = {}, +): Promise { + if (runtime.target === 'electron') { + const app = runtime.electronApp + if (!app) + throw new Error('The Electron audio session does not expose its application.') + + const existingChatPage = app.windows().find(page => page.url().includes('index.html#/chat')) + if (existingChatPage) { + runtime.activatePage(existingChatPage) + } + else { + const chatButton = runtime.runtimePage.locator('button').filter({ + has: runtime.runtimePage.locator('[i-solar\\:chat-line-line-duotone]'), + }).first() + await chatButton.waitFor({ state: 'visible', timeout: 30_000 }) + runtime.activatePage(await openElectronChat(app, chatButton)) + } + } + + const { page } = runtime + await page.locator('textarea').first().waitFor({ state: 'visible', timeout: 60_000 }) + await captureStreamingTranscription(page, 'textarea') + + if (runtime.target === 'electron') { + await runtime.runtimePage.waitForFunction(async () => { + const devices = await navigator.mediaDevices.enumerateDevices() + return devices.some(device => device.kind === 'audioinput' && device.label.includes('Fake')) + }) + + const hearingTrigger = runtime.runtimePage.locator('div[aria-haspopup="dialog"] button').first() + await hearingTrigger.waitFor({ state: 'visible', timeout: 15_000 }) + await hearingTrigger.hover() + await hearingTrigger.click({ force: true }) + await runtime.runtimePage.waitForTimeout(500) + + const enableButton = runtime.runtimePage.locator('button[aria-label="Enable microphone input"]') + await enableButton.waitFor({ state: 'visible', timeout: 15_000 }) + const inputReady = options.readiness === 'streaming-transcription' + ? runtime.waitForStreamingTranscriptionReady() + : runtime.waitForVadReady() + await enableButton.click({ force: true }) + const disableButton = runtime.runtimePage.locator('button[aria-label="Disable microphone input"]') + await disableButton.waitFor({ state: 'visible', timeout: 15_000 }) + await inputReady + return + } + + const microphoneTrigger = page.locator('button').filter({ has: page.locator('.i-ph\\:microphone-slash') }).first() + await microphoneTrigger.click({ force: true }) + + const enableButton = page.locator('button[aria-label="Enable microphone input"]') + await enableButton.waitFor({ state: 'visible' }) + const inputReady = options.readiness === 'streaming-transcription' + ? runtime.waitForStreamingTranscriptionReady() + : runtime.waitForVadReady() + await enableButton.click() + await page.locator('button[aria-label="Disable microphone input"]').waitFor({ state: 'visible' }) + await inputReady +} + +/** Opens the chat page and waits for its input. */ +export async function openChat(runtime: AudioInputSession): Promise { + await runtime.page.evaluate(() => { + window.location.hash = '/chat' + }) + await runtime.page.locator('textarea').first().waitFor({ state: 'visible', timeout: 60_000 }) +} + +/** Returns the assistant messages on the current chat page. */ +export function assistantMessages(runtime: AudioInputSession): Locator { + return runtime.page.locator('[data-chat-message-role="assistant"] .markdown-content') +} + +async function openElectronChat( + app: NonNullable, + chatButton: Locator, +): Promise { + let lastError: unknown + for (let attempt = 0; attempt < 10; attempt++) { + await chatButton.click({ force: true }) + try { + return await waitForElectronPage(app, page => page.url().includes('index.html#/chat'), 3_000) + } + catch (error) { + lastError = error + } + } + + throw lastError +} + +async function waitForElectronPage( + app: NonNullable, + predicate: (page: AudioInputSession['page']) => boolean, + timeoutMs = 60_000, +): Promise { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + const page = app.windows().find(predicate) + if (page) { + await page.waitForLoadState('domcontentloaded') + await page.bringToFront() + await page.waitForTimeout(750) + return page + } + + await new Promise(resolveWait => setTimeout(resolveWait, 100)) + } + + throw new Error(`Timed out while waiting for the Electron chat window. Open pages: ${app.windows().map(page => page.url()).join(', ')}`) +} diff --git a/packages/testing-audio/cases/shared/interactions/hearing-playground.ts b/packages/testing-audio/cases/shared/interactions/hearing-playground.ts new file mode 100644 index 000000000..9f9ab4607 --- /dev/null +++ b/packages/testing-audio/cases/shared/interactions/hearing-playground.ts @@ -0,0 +1,68 @@ +import type { ElectronApplication, Page } from 'playwright' + +import type { AudioInputSession } from '../../../src/types' + +import { captureStreamingTranscription } from './streaming-transcription' + +/** Opens the Electron hearing playground for a case that selects this input UI. */ +export async function openHearingPlayground(runtime: AudioInputSession): Promise { + const app = runtime.electronApp + if (!app) + throw new Error('The hearing playground interaction requires an Electron runtime') + + const settingsButton = runtime.page.getByRole('button', { name: /Open settings|打开设置/ }).last() + if (!await settingsButton.isVisible().catch(() => false)) { + await runtime.page.getByRole('button', { name: /Expand|展开/ }).last().click({ force: true }) + await settingsButton.waitFor({ state: 'visible', timeout: 15_000 }) + } + + await settingsButton.click({ force: true }) + const settingsPage = await waitForElectronPage(app, page => page.url().includes('index.html#/settings')) + await settingsPage.evaluate(() => { + window.location.hash = '/settings/modules/hearing' + }) + await settingsPage.waitForURL(/#\/settings\/modules\/hearing/) + await settingsPage.getByTestId('hearing-playground-monitor-toggle').waitFor({ state: 'visible', timeout: 60_000 }) + return settingsPage +} + +/** Enables microphone monitoring on an open hearing playground. */ +export async function enableHearingPlaygroundMicrophone(page: Page): Promise { + await captureStreamingTranscription(page, '[data-testid="hearing-playground-current"] p') + + const modelBasedToggle = page.getByRole('switch').last() + if (await modelBasedToggle.isChecked()) + await modelBasedToggle.click() + + const monitorToggle = page.getByTestId('hearing-playground-monitor-toggle') + await monitorToggle.click() +} + +/** Reads the requested number of final hearing playground transcripts. */ +export async function readHearingPlaygroundTranscriptions(page: Page, count: number): Promise { + const transcriptions = page.getByTestId('hearing-playground-transcript') + await transcriptions.nth(count - 1).waitFor({ state: 'visible', timeout: 60_000 }) + const results = (await transcriptions.allTextContents()).toReversed() + await page.evaluate((transcriptionResults) => { + if (window.__airiAudioInputE2E) + window.__airiAudioInputE2E.transcriptionResults = transcriptionResults + }, results) + return results +} + +async function waitForElectronPage( + app: ElectronApplication, + predicate: (page: Page) => boolean, + timeoutMs = 60_000, +): Promise { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + const page = app.windows().find(predicate) + if (page) { + await page.waitForLoadState('domcontentloaded') + return page + } + await new Promise(resolveWait => setTimeout(resolveWait, 100)) + } + throw new Error('Timed out while waiting for the Electron renderer') +} diff --git a/packages/testing-audio/cases/shared/interactions/index.ts b/packages/testing-audio/cases/shared/interactions/index.ts new file mode 100644 index 000000000..b57841b15 --- /dev/null +++ b/packages/testing-audio/cases/shared/interactions/index.ts @@ -0,0 +1,7 @@ +export { assistantMessages, enableChatMicrophone, openChat } from './chat' +export type { EnableChatMicrophoneOptions } from './chat' +export { + enableHearingPlaygroundMicrophone, + openHearingPlayground, + readHearingPlaygroundTranscriptions, +} from './hearing-playground' diff --git a/packages/testing-audio/cases/shared/interactions/streaming-transcription.ts b/packages/testing-audio/cases/shared/interactions/streaming-transcription.ts new file mode 100644 index 000000000..0cb923e08 --- /dev/null +++ b/packages/testing-audio/cases/shared/interactions/streaming-transcription.ts @@ -0,0 +1,20 @@ +import type { Page } from 'playwright' + +/** Records distinct visible transcription values until the page closes. */ +export async function captureStreamingTranscription(page: Page, selector: string): Promise { + await page.evaluate((captureSelector) => { + let lastUpdate = '' + setInterval(() => { + const element = document.querySelector(captureSelector) + const value = element instanceof HTMLTextAreaElement + ? element.value + : element?.textContent + const update = value?.trim() ?? '' + const updates = window.__airiAudioInputE2E?.streamingTranscriptionUpdates + if (update && update !== lastUpdate && updates) { + lastUpdate = update + updates.push(update) + } + }, 20) + }, selector) +} diff --git a/packages/testing-audio/cases/shared/providers/aliyun-nls.ts b/packages/testing-audio/cases/shared/providers/aliyun-nls.ts new file mode 100644 index 000000000..d6f74270c --- /dev/null +++ b/packages/testing-audio/cases/shared/providers/aliyun-nls.ts @@ -0,0 +1,26 @@ +import type { ProviderConfiguration } from '../configurations/provider' + +/** Credentials and Provider selection for Aliyun NLS transcription. */ +export interface AliyunNlsAsrOptions { + accessKeyId: string + accessKeySecret: string + appKey: string + provider: string +} + +/** Creates an Aliyun NLS realtime ASR Provider configuration. */ +export function aliyunNlsAsr(options: AliyunNlsAsrOptions): ProviderConfiguration { + if (options.provider !== 'aliyun-nls-transcription') + throw new Error('The Aliyun NLS Provider must be "aliyun-nls-transcription".') + + return { + id: options.provider, + definitionId: options.provider, + model: 'aliyun-nls-v1', + config: { + accessKeyId: options.accessKeyId, + accessKeySecret: options.accessKeySecret, + appKey: options.appKey, + }, + } +} diff --git a/packages/testing-audio/cases/shared/providers/index.ts b/packages/testing-audio/cases/shared/providers/index.ts new file mode 100644 index 000000000..99a7d1ff0 --- /dev/null +++ b/packages/testing-audio/cases/shared/providers/index.ts @@ -0,0 +1,4 @@ +export { aliyunNlsAsr } from './aliyun-nls' +export type { AliyunNlsAsrOptions } from './aliyun-nls' +export { openaiAsr, openaiLlm, openaiTts } from './openai' +export type { OpenAIProviderOptions, OpenAISpeechProviderOptions } from './openai' diff --git a/packages/testing-audio/cases/shared/providers/openai.ts b/packages/testing-audio/cases/shared/providers/openai.ts new file mode 100644 index 000000000..c632e9578 --- /dev/null +++ b/packages/testing-audio/cases/shared/providers/openai.ts @@ -0,0 +1,58 @@ +import type { ProviderConfiguration } from '../configurations/provider' + +/** Configuration for an OpenAI-compatible Provider selected by one case. */ +export interface OpenAIProviderOptions { + apiKey: string + baseUrl: string + model: string + provider: string +} + +/** Configuration for an OpenAI-compatible speech Provider selected by one case. */ +export interface OpenAISpeechProviderOptions extends OpenAIProviderOptions { + voice: string +} + +/** Creates an OpenAI-compatible ASR Provider configuration. */ +export function openaiAsr(options: OpenAIProviderOptions): ProviderConfiguration { + return { + id: options.provider, + definitionId: options.provider, + model: options.model, + config: { + apiKey: options.apiKey, + baseUrl: options.baseUrl, + }, + } +} + +/** Creates an OpenAI-compatible LLM Provider configuration. */ +export function openaiLlm(options: OpenAIProviderOptions): ProviderConfiguration { + return { + id: options.provider, + definitionId: options.provider, + model: options.model, + config: { + apiKey: options.apiKey, + baseUrl: options.baseUrl, + }, + } +} + +/** Creates an OpenAI-compatible TTS Provider configuration. */ +export function openaiTts(options: OpenAISpeechProviderOptions): { provider: ProviderConfiguration, voice: string } { + return { + voice: options.voice, + provider: { + id: options.provider, + definitionId: options.provider, + model: options.model, + config: { + apiKey: options.apiKey, + baseUrl: options.baseUrl, + model: options.model, + voice: options.voice, + }, + }, + } +} diff --git a/packages/testing-audio/cases/single-utterance-pipeline/case.audio.test.ts b/packages/testing-audio/cases/single-utterance-pipeline/case.audio.test.ts new file mode 100644 index 000000000..839aff10d --- /dev/null +++ b/packages/testing-audio/cases/single-utterance-pipeline/case.audio.test.ts @@ -0,0 +1,121 @@ +import { describe, expect, it } from '../../src' +import { configureModuleConsciousness, configureModuleHearing, configureModuleSpeech, configureOnboarding, loadCaseEnvironment } from '../shared/configurations' +import { assistantMessages, enableChatMicrophone, openChat } from '../shared/interactions' +import { aliyunNlsAsr, openaiAsr, openaiLlm, openaiTts } from '../shared/providers' + +describe('audio input pipeline', () => { + // An OpenAI-compatible TTS Provider generated the fixture in mono 16 kHz PCM WAV format. + // The fixture contains 14 seconds of leading silence for VAD initialization and 3 seconds of trailing silence. + // Its warm-up phrase gives the VAD time to start. Only "Please say hello." is required in the transcript. + it('runs an OpenAI-compatible request through the complete pipeline', { + input: new URL('./input.test.wav', import.meta.url), + // This case keeps AIRI's default VAD and selects every remote Provider explicitly. + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_ASR_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_ASR_API_KEY to run this ASR case.') + if (!apiKey) + return undefined + + return { + provider: openaiAsr({ + apiKey, + baseUrl: environment.TESTING_AUDIO_ASR_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_ASR_MODEL ?? 'whisper-1', + provider: environment.TESTING_AUDIO_ASR_PROVIDER ?? 'openai-compatible-audio-transcription', + }), + captureFormat: 'wav', + } + }), + configureModuleConsciousness(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_LLM_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_LLM_API_KEY to run this LLM case.') + if (!apiKey) + return undefined + + return { + provider: openaiLlm({ + apiKey, + baseUrl: environment.TESTING_AUDIO_LLM_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_LLM_MODEL ?? 'gpt-4o-mini', + provider: environment.TESTING_AUDIO_LLM_PROVIDER ?? 'openai-compatible', + }), + } + }), + configureModuleSpeech(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_TTS_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_TTS_API_KEY to run this TTS case.') + if (!apiKey) + return undefined + + return openaiTts({ + apiKey, + baseUrl: environment.TESTING_AUDIO_TTS_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_TTS_MODEL ?? 'tts-1', + provider: environment.TESTING_AUDIO_TTS_PROVIDER ?? 'openai-compatible-audio-speech', + voice: environment.TESTING_AUDIO_TTS_VOICE ?? 'alloy', + }) + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio) + + if (audio.transcriptionCaptureFormat) { + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + } + + await expect(audio).toHaveTranscriptions([ + ['Please say hello.'], + ], { match: 'contains' }) + + await expect.poll(async () => (await audio.completedSpans('LLM inference')).length, { timeout: 60_000 }).toBeGreaterThanOrEqual(1) + await expect.poll(async () => (await audio.completedSpans('TTS synthesis')).length, { timeout: 60_000 }).toBeGreaterThanOrEqual(1) + await expect.poll(async () => (await audio.completedSpans('Audio playback')).length, { timeout: 60_000 }).toBeGreaterThanOrEqual(1) + + await openChat(audio) + const messages = await assistantMessages(audio).allTextContents() + expect(messages.at(-1)).toMatch(/.+/s) + }) + + it('transcribes the greeting with Aliyun NLS', { + input: new URL('./input.test.wav', import.meta.url), + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const provider = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_PROVIDER + const accessKeyId = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_ID + const accessKeySecret = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_SECRET + const appKey = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_APPKEY + context.skip( + !provider || !accessKeyId || !accessKeySecret || !appKey, + 'Set all TESTING_AUDIO_ASR_ALIYUN_NLS_* variables to run this ASR case.', + ) + if (!provider || !accessKeyId || !accessKeySecret || !appKey) + return undefined + + return { + provider: aliyunNlsAsr({ provider, accessKeyId, accessKeySecret, appKey }), + captureFormat: 'pcm', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio, { readiness: 'streaming-transcription' }) + + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + await expect(audio).toHaveTranscriptions([ + ['Please say hello.'], + ], { match: 'contains' }) + }) +}) diff --git a/packages/testing-audio/cases/single-utterance-pipeline/input.test.wav b/packages/testing-audio/cases/single-utterance-pipeline/input.test.wav new file mode 100644 index 0000000000000000000000000000000000000000..99e270ffde597296e286ac35689d4e32fa26ad2a GIT binary patch literal 662478 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 literal 0 HcmV?d00001 diff --git a/packages/testing-audio/cases/two-utterance-streaming/case.audio.test.ts b/packages/testing-audio/cases/two-utterance-streaming/case.audio.test.ts new file mode 100644 index 000000000..b4639e51d --- /dev/null +++ b/packages/testing-audio/cases/two-utterance-streaming/case.audio.test.ts @@ -0,0 +1,105 @@ +import { describe, expect, it } from '../../src' +import { configureModuleHearing, configureOnboarding, loadCaseEnvironment } from '../shared/configurations' +import { enableChatMicrophone } from '../shared/interactions' +import { aliyunNlsAsr, openaiAsr } from '../shared/providers' + +describe('audio input pipeline', () => { + // The fixture has 12 seconds of leading silence so that the browser VAD can load. + // It repeats the greeting after a 2-second pause to catch regressions that drop the second utterance. + it('keeps two utterances in streaming transcription', { + input: new URL('./input.test.wav', import.meta.url), + // This regression isolates AIRI's default VAD and one explicit ASR Provider. + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const apiKey = environment.TESTING_AUDIO_ASR_API_KEY + context.skip(!apiKey, 'Set TESTING_AUDIO_ASR_API_KEY to run this ASR case.') + if (!apiKey) + return undefined + + return { + provider: openaiAsr({ + apiKey, + baseUrl: environment.TESTING_AUDIO_ASR_API_BASE_URL ?? 'https://api.openai.com/v1/', + model: environment.TESTING_AUDIO_ASR_MODEL ?? 'whisper-1', + provider: environment.TESTING_AUDIO_ASR_PROVIDER ?? 'openai-compatible-audio-transcription', + }), + captureFormat: 'wav', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio) + + if (audio.transcriptionCaptureFormat) { + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + } + + const expectedTranscriptions = [ + [ + 'Microphone warm up, microphone warm up. Hello, AIRI, please say hello.', + 'Microphone warm up, microphone warm up. Hello, Eric, please say hello.', + ], + [ + 'Microphone warm up, microphone warm up. Hello, AIRI, please say hello.', + 'Microphone warm up, microphone warm up. Hello, Eric, please say hello.', + ], + ] + await expect(audio).toHaveTranscriptions(expectedTranscriptions) + + const finalTranscriptions = await audio.transcriptionResults(expectedTranscriptions.length) + const streamingUpdates = await audio.streamingTranscriptionUpdates() + expect(streamingUpdates.some(update => !finalTranscriptions.includes(update))).toBe(true) + }) + + it('keeps two Aliyun NLS utterances in streaming transcription', { + input: new URL('./input.test.wav', import.meta.url), + preflight: [ + configureOnboarding(() => ({ completed: true })), + configureModuleHearing(async (context) => { + const environment = await loadCaseEnvironment(context.env) + const provider = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_PROVIDER + const accessKeyId = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_ID + const accessKeySecret = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_ALIYUN_AK_SECRET + const appKey = environment.TESTING_AUDIO_ASR_ALIYUN_NLS_APPKEY + context.skip( + !provider || !accessKeyId || !accessKeySecret || !appKey, + 'Set all TESTING_AUDIO_ASR_ALIYUN_NLS_* variables to run this ASR case.', + ) + if (!provider || !accessKeyId || !accessKeySecret || !appKey) + return undefined + + return { + provider: aliyunNlsAsr({ provider, accessKeyId, accessKeySecret, appKey }), + captureFormat: 'pcm', + } + }), + ], + }, async ({ audio }) => { + await enableChatMicrophone(audio, { readiness: 'streaming-transcription' }) + + await expect(audio).toHaveCapturedTranscriptionAudio({ + count: 1, + minimumBytes: 8000, + }) + const expectedTranscriptions = [ + [ + 'Microphone warm up, microphone warm up. Hello, AIRI, please say hello.', + 'Microphone warm up, microphone warm up. Hello, Eric, please say hello.', + ], + [ + 'Microphone warm up, microphone warm up. Hello, AIRI, please say hello.', + 'Microphone warm up, microphone warm up. Hello, Eric, please say hello.', + ], + ] + await expect(audio).toHaveTranscriptions(expectedTranscriptions) + + const finalTranscriptions = await audio.transcriptionResults(expectedTranscriptions.length) + const streamingUpdates = await audio.streamingTranscriptionUpdates() + expect(streamingUpdates.some(update => !finalTranscriptions.includes(update))).toBe(true) + }) +}) diff --git a/packages/testing-audio/cases/two-utterance-streaming/input.test.wav b/packages/testing-audio/cases/two-utterance-streaming/input.test.wav new file mode 100644 index 0000000000000000000000000000000000000000..1affb61a9e744d9cafab5d2d18f7a1d443aaf4c9 GIT binary patch literal 1027662 zcmeF(XPgv8*f;9xo;*9VITM#9XB3bOA_zzhfc6MiGXS%De3SD(qwO!i0{r21Y;#iM2ySE%NYJBN< z#+X3ctS0ni24f z3;sa>0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= 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

IGirikV4aEKs@S9(#x3$B`>4x_yiMmARFrS)O z^Ezuw`y9sy&TpOXJO6bIcQpThY`t~7RMq$Ye{$x`y_fEg?v@l#kQAjukd#J1KtSn6 zMGyr+L_krI6b0!H0R?H5mhKX`F+JzZ@44o@d3?Tq{O)|JY zCLc^*mK;sG;rqrK;~j_GTEv`d9M`XDs#Z^3!P@L2tIYRKQM+e!LwI#)X{bkdX=EMJ z+L}n~P)mRFv}aE@J^A)Yqo<{w-FnuBDmI-`r=*rmYn6VAc>Q6a!IAf4^PS_$eQlL- z)NJQ@)05kC!8~Z*Hog2$GMDMUsVn2(+Ei7DoI%zd!}7X2_-F8qP&2Z2)r_68nH_2y zeX@DVTR5p{iki7{mM2;IWL=x}YSzrz3TL~RHFMT~GIz~%Hu>G8uD&0vEY@J}BF|iN zfYDg*r9D({s$Q*_mZELJ648{}@J&GG>yz30A$iNo+l!(~sDvL}eBg^*ida~{h z4}R&NoxUWsB6)_sf7;?%_tZ6MSu@)DTLwx7vr}!P895-w@KkfvVdzacJ?*@x4A$ ze?@<$eE|>Kqc&21Wc(|{+Y(heHMTwKkJKfO{Z6Q8sAjM=cAeuHz0qybGrsoMqEhqk zfsui|e#Ji}qkYCZ8JEcSHYYGUI1Nic&q%vytyn?C$}4cZo@D(lt(7Lf)&?UJ=ifI9ISzR+vdS-d+S*g}C zU+1Kv$!C(^qIU3rl+4t-{UzzB&u`VTCVTgKDnbQwY1?L_jx zUk`p7{3KX1xH<4$;5=1tRs_pXCt`o7HrY7mM23>Xa~gT+zk!!mN9rA;Oi<@&AE5y~ zHnLNvc#F}_$cByJ4P!pmk0Zt;BCA*H;ILS=B4_|P_`F1aroUnAH(HyI%`ecGo_Z%( zNxlWXEJ*{BrY4O}>XcMA=?Ph`oBD29A6lx_*L%eClIKfvoAD3%#^-5K^aRRc6EXa? zasfUtn3@JP?W?hOV=B3|hDXascSf2-mWI!T=7i>lvWMOYHVS5tVLf*s&HvPY&i|&r zB(}){{to_Pf%QZxcMon1`h%rI?}SE%x`kSWzMzUp!^pKr+vuHWUn(B>$$rPaV%YSdXuHUh%f^=H`jt@SHXmneUrJ&3r}wk;2ixBinfTtkJR5 za!e)nTgz|}a(srUey{=y`cr1qKHAqR@&kDG<46rEB2}hRLkd?eQ7!mMlsl`G0r_;eY~&@A+}_lQeYpuW6V`xojD_2Ncc--T7Z zkv>=7hBfRf?6zz5gZgg0x4v4RfG@xpUgPv;SUNlDzv2&YOslBRM^8Ko*PpG`=lc-t zI9Ubml2K}xYO7?NRx99R@VYvk3{%ySHir>&+dKX?-Y5s+-{ML1ZM;r=3Nxq|y6P{i zRtr!I2Eus{l0ABxW~^v`s_zlUT7>GBU6l^X2=uiqs)+>ESe?lFdqpXUbg-1Q_=#ev zm(-WZSKN|c>Ts<$mD=h!C9_&yTcM3q8=%eg#^YiYD{dKO5qCU;Pl!*Qu5<;RFz({XKjk>fs|Jen-Et?#o&& z74>Szi^umU1>-H^8^{p<1J%XO+6Cfukp9!0?qs&B8vnw+>!jk#(ikt4Nlrtj9!Fk9 z3ph&^uWj~)_-{zSw)3C!H8Nb(>4&BJ{dhm3uQ!tCt5$rAvngH{*=iyh%QQR^nj&{U z#?vUj8bju(f?hux?O{)RI`Wc&ggAhnT#4RVo##9iudd8Q&%O-yG5~2H9ZkPrypTFq zU8ugU>;(hZO~tcV{3g^<4OwFsdPWl@@Y+Z!H?UN8WKBOEuc{PK*OMXO4pG_%mGL~q zX>-h%PDM*YM-$`GEbn{r6miTqVpU8LyfEyY1aN})T9 zR!b>;)dI?|Tv=kVI}ug=2`%2I^i(6X?wRslJXd@^PiUccysUf~x73S_+!NN)$w-wu z;{Cu{`^G;*w*HK0?NZ8iXAB5aM!W-bQ(f6bAAPBeKysU{9E7$r^CU^iX(W_lc+Pws zUrDvsQ}Id4cRXp2_YxVaI<__QSCXk|SU#65=26RY-adCLSpq@eA>`7IS6tXj9qSrboe^6^`9#mGEIq;8?M~yhEX?L%V3CJcWL%;y*B-@z2YQ zD1`UpWOTiA@e#=P*_2U8r)Bu`v9c*X6HV$FW4f20m%Ipr8KA?)Yu=knyy<8Z&eYT=(C2h;N6HqFX3ypC=fV=)g+h(Cno#%Ws9@~ z3{yTv^4%7%%uzMtRngr}!%1GoyL3H0z6u(@0iRr^lmTTpf`8g&P^^b=tBy)Jc*cFk zps6y9wwGgkui_P1fU$1^9qo$uhIdqeQ+*0`odbX$bK{G$0R}W+Dsle=7 z%CkIxlgwglKZN4IHnIX^C|tb0y-Imu3rOg^Db1el$ByIQroZe z?s&NBR9cc93#|CIE`Xc0R4yyuvwm-b+w5Y@rl9#J^Q7D1LQCSElq*OeIlv*lWAyq# zX@am7h2ONrbE-G%#bEZIgA(e*|8iDKLbrn})Z)x+JnL-m?w0H? z32*uUdjFf=d4U=BB`fhNo^>4UE5q|uMqcgBJl%(YO2?VgB<~- z`-yh9JzNDup&_`!i}dwy5G7W2 za z7~}qtu2q$A>ke64Jvc(3S*rd^_VnGL3$?^Q$K0;x(#9*dod))m zXf`UP=866uJrXO-u^(`x&j=b{o0&WlJTcGP-g(~B-U`-KYm>DCOV>W{Mo$|vU0fk>H1ZM>vL2esg~z*sU+y-aq}u>TnK(j9;1Kz6eC zuMCtW+hb$uv;7=y7YRkyM&F1Xz;e};s~o`o)_`8mr;JcP)JE!yjN|4y^sUq00oGEi zY(??d&76{y`QI$d{?Yq-g4#|t%dTsvz@0OPe4z4%!`F+CJ1Gf zc#88imB%N9uLs8mzV=u0XY)VHIGXW&#>k8sRKabNel=}qTG6!ZX|2=Frp->Dn(>>z zVsJv}<8a4_Khm6B@YSd@S{T&n4{H2wu^%~Aluy*t+Ab=JuQr-ex2lAvh^L8X5U)(0 zPd%lrA=Kz>O78RnS$bsoHq-8;VP4Z1p=7a_MEa3W-VUt~zY^_kzfT1|Q@f^pujfVw zf8RKPU2?2h*3;Dcy7jxY%i3;TvW8nPdcUA%@e}m77V32*;eu*6vQhcfid4P2#~QNA zS!7pl71at_9`e-oF)kV}nY+x8Fy57%Bo znrZ2rBMWm|>M$P(4GUEXJ)&-kN}jWc__+>CACa~wwNh%wR6F%X+THY6MxH>f;L6}{ z*vnT2zoEX$jo{~@A>n?JdC~i^He~(1iO=R)ZKpocxXakxGDmtIdB%84TPLmhzD7Q; z@1(WSns0Tnrdz#zJCjnAJ5nQ}cJi>Kfc1svyxx*l?u|W&>CW6P_ z#J|5P^7(jYu-!e@CfX>{Iy^CSH26|*JK3N&`iuEzWIRsqlzup^Jv7=f?Osk}hdttZ+keY3I9oZ#u^eZ(j>wc1-l ztQV|ry)Sqlc3@Ma;D^izP8p3&zpv-1>=L9+IGX(2C8ZP9(@~c z{Y+R~|A>!L3WHd!(5izHd}fR{t9zDu{>HD@@44Wa@2TQB1!gkG>}BRR|1#!bE&m&= zp^#P*9pGfV3?8*LonlUQ=P0?z7lCo@!AGufi2Ql@vzEwMoc>DsqqJT4ooiG9yO#bE zIesr@RP*=nPrw^R2}}!g4E_>Ij=VxH>4$bn)_X5H*D|G{s$rx4UjNf*;#uqc*t%@p zgu~>r`g>=4Hk)P5SIj-;Ku=9?JL?zUqoi@kHIiFV-y^p-)%aaI#hQPU`bhs$74$}; z-s2woKU*i8+!FHkIq{3k&`%aguDdn_)e$AZXJz{O~mB;VAuCEonIL-5edE1z4d}o|w zO(_jZ_Lcd%xr{0tFKgSBEb%Y#SY8)xMm^@1(V6(NjELG)GI%*0B~xcSV_Ew9X(Lj% zJ?r;u?6c6bqlwz@>oeB+dk6lZ-oq=wX~DmOr9vA*^TL-RouS?$@v+JmYD4W5t448p z_%${AOnV_i!Jx9$Y<`naYIgDQlSTn7Etn$9*z8|gT-UViwK1zFp zmiUenvX7C??lZeTwJ;R2-!G@wim7{HBXzP}#GDQ_wkXx1wU~$=G^qh9~gsp5fe&PgINQPmPP7#a767 zC8>6D#pK_U@+KAW6|>rTfAb7x?P}mSoW_xpz zaY;X~cjJh`P_cw-?7x-%ciQn(PwI?k?>+nZSp_Qm z%}RSay()D-miwCpE(RtNaUeONt490BezG+r&KBUWar~^`1ckm}RHmNbCsZcLM~k1b z%D080mw48g4~)9_P>lqQ{T$5w9r#KQ;$Xfs>zY3q`}8SVV=%82P`r}V1ZxZv^>s^rJ!J(kL7tRB$=8$WCXEN7pJlbO@>-|7 z!{Gj}c?OxqjXhddH5C8K>1e+g!^=D}hxX=nk|uT5pQCp{JYK3*7uoB6eOQS}2p=RX?t`#uBsF7-s0k7y4SPS((8{ zmk}3t)A`Q%)p zLYpKr>7wr^;%8p+-LZOF)4Y8>dCkA{A)2nvj#r`vYMt26(Yn#Q(DfvE)~Rr@a4UT5 zW(MZ_7iX+Vf53WsKXqB^d#Udd2lh*9YU(R#i>dRnKD}E;F@Nqrv*6ND*2viCHu9!s zqt(ULXX+TR@hp0C(DSqUFr&6_-vHlm-)!G{-wxkopW!QQrBR3LJZmu-T%Cb-gV@+;j4I;G zBJ+sSYYc_g3=a-bk1nvueF=aZN&hze08vAks2or|qgF<%M9j%g{)tfe zx{w|j5ZxV1w@vi&pOrRLJ1j%}#*fjwfWjW?0i?qw2IvX4ZSL8O;+^gM(E{RKno9`(LIg#h~IO5 zLZ7?o3_+Wnss^-=j3;JgZ&m9d++%{TyHE9fVO6$nd3Sktdw=&H^Zw)A8u*cA!oaNC03tEkdLDssT=(Q)nq0`ZsU2_hB^rw0=9pUU!}g_iHye?x%~D0 zL;VZL^L@;J)_>Li%%3yRJ8(7dd2n3lQ!Jggq8_~R^5Ca)ROx^=SzTMMRV8+6uF=8F z={e__jbu5&`r7Jconh=tdTN<{kP>q13$&VAQ2j?eO--(g>Lzu9+5oHhW_0cPXyTIR z$3(BKj82}Fn6ky#b8Y9G^9SB$(OW!@KkG0-=(R0#VWqhEQ)BeVTp}b?*e$pMhK-I3Tp%S5$c$9t{$Ogri_aDya zmyt8$-}K$-ThkAvUq#NWpYa)1)qeiV{;q*QV0~~b_Ua1Mp2z8x*i8+c{SMrUMvFV@u*bpwdYE1(gj@P`P3 zF>c0dqCfNe2J^fx+GuvP(H-_wW_V9(qd&68J1>Kq7EoW(KG1(h8?5TBg#NeE*C1(M zQnBQA$)l1#O8zu?YI5`Bhe;ihzVQ8QZS*enywB>GSwEvL1huT`l(5UiT1BTt{s`v_ ze-hF|p9C{e^|)r>j(@rTUH>coJpK^2;sfxsPcz13j3$C?J#BBtxQ_`m3f91?+KMU( zW04;|aYlnD<|8h3x>iNMs82AG&85ULt@dPx+P?Ds=$-9-&3o4Kvgb3r(Mv${d$hdT z3^j}T6Bu$9u;Xo@3ty7GbtF*-BS0#qg5JIheRswt(G;8~jEBr_BI{NXG5pl&fuws~ zIj=s{a$t!aM?}_pR$X7J@6)7MQp4o#Y%P;ZCSOkKk+j2S`d+oVd%Jk*nwgAC+Ar!1 zrBA$}Q`2r18xh@vVYgrSUT9*deCQUsd;eg~VE&*F9X}&*H*g7G<39o$178Ow1qKHC z2Sx|x1P&sjO$z1={f0K&BhoNhCsxfag-z`Wc*NV(mfo&)#Ev)uxo{XcpsRTL6Xo}= zr@rSIGSh#?YsLcos#a2ak2zfdq_aI3&UxCk5!B zBog?ocsq`63Dz?Z)Ox%!7!+ZRe$;qoX7?6GHoEFtkW?ypUh;wDt;wU4^CT}#@+P(R zO|%w!w|h>Q=ZsVOK5eVIS=k;xNObSDSQyXaUer*}7hV=>j34#s;7`HX!Ku_K|0uX9 z_(O1Ya2>Cu!Oz(DLGZoc#NguKG3xO2#22{%e#)aFm81UXiP$gp9A_j}-7M-+b&6IB z>*>o>@<}q^GCwz0naj;dW)m~bScsSYNeRJgk9CPoh-?fi)G7%C zzYq3C?k*P07t9?j9IO&-#`nRr`8{gjj0=7d{3Upv5$}miu7^8^cZaJ||NAvOtf$3l zVxv8bm9Ptuq7T*e+5kPtn1kcvo929TyZO7h)%+A|xz}87R5#Y?`SkHre=ekU!D{uC zSl{FJK)V8~S84pS7u&a~iue^PdIkK(W`gqV0PVX7_8JFwtcacDeQa7MmF(*KAaqNJ z?5m8=g6Ro*o_KFqXM7vUlAb+fWXiWGAEs1JS(1E_sKXmXr+w!cZMHFL=w-0K*HYSo zY%Q}-P|dz*v`u6(m2q-}rUi2a_fywleBk52awy(J(|!j;;d>}xH^|6CY6P{!ui$>D z4Yv1Mkqwa-i9W0r+ZwA&cI=jTsDUdg$COEG4egdT1MFtD@dT`-AN~XHn2pR#=1#of z@9M+!r$o{|z(e{po@DDl&A)Q;Q&sF8qDkx6&FG88_>vUEYQGCU+KBPr4eDPE|E}rE zR^=IXtI_HqH7o1lA$ZJM@Px<4YV@5tM1KEk{p=f@lrMQ@vXxRbrFhD1BH!01o$wv8 zHhIzC&D_lV_3B*k^^cvU_V2M!v?|r#Hiz|auh3t?F2QJEb6`ebc;G#B&9#Bcfjq(X z!8v#%MT6x+okKI2?K(dBtHL^Y)Q?80N0&$QQ5iKebpw-~c}_vF*;-_7AAs-ISImL6 z`U}QH<98!$W*ceCKEu@?VW;J}i{xk*~0eysiJrOybfkd|? zp{1Q*^e=!4G>sLG<-*^mEn3UdSU>z227*}5!a}tGYxa2Lg0fnF?Q89T_EamRx7I%e zUwRQ)I-5C@NYt-91&B8;ZLI=J{nD4_tDV#HRfo!VnP!|RB*s1_L-SswX2 zVn$zz4vGF0{V!UV+zshuIXF(W_cb8u6R9*C}`Us9N#cW_a)#l)damX2EzY;4Jt;j04m0D#7;PWkmwSv`xje|Xd^QcOd6VIYO zp~B%&@chD1|2L68Bljb*NGA0C3eo2D!y;lg3dBamF2|bL`|bM9ey2WGiWl(;jNe>ltYXK(!`9;ubsC(g3Dw5S z#NLR_h+U0!u&>yoi10m%uRt;NfZ7_JqAVO`HE8M?{WSROPJNZW9Dkj~Xbxv}AD&#B zjC}YgsmR$Wp#8>7K%`!DGSq)8`fv0CNZ`8Y*U^deLa%6VaGrVW zNr?@NU5s_HAKFvk44bik-d2W!Pmk7~Xx;R~==q~TaUL5f@CMEN8*W*~Sc~`IFl{fs zsCBW)9&++HlWZGW=s_GzU8*mC9=n7_yUwlzZ)}HEY&zbn->doX@%V7AtWKHItvZkS@W)jv{qi1m_bYM07l65c>5%wX!JbhYHQ)7<0g_&I#f8wP?9qD>0{UyB&Bf1eEfaVRVFP~8Ai=uWw7@60A$)LM>{DpWp}j0ZBA4Caun>XCDG@KqR~nI+)P+3M<~0M()d=F z(iYK<*RhdI*SqT}`uF6A>5W(Nbu@ud&Uw(hyRn~GB^Jka#q3y5>iE9K%%HX$YsEnH z<2Zi(L&;CFjau;8$kx*zeR`kf*Gdxo{<(ex|JGN@KeN-&kqCgl zo|89W#eErnl#b*sScPv%S*)rT@$eb1{sxj?9?iH6_Sju&Z&g*lK})=k$I6@WVsVGs zVf&n=&M0E+!f=N!-1*noIDARx!Y^9eckLhX#%d17%uv^9HR#O+%(zDQ5YNY-+(u$m zm?Jl}AN1+QQ2L;mH@|h>>f<}*OHQhoR5>XZi1(kqIlivGdcGRITE2X~&DK5dhn`Q2 zD%#$7FS}l}dHCnx{6NI-_kV;xaSC-Bi-9$kU@UHvd*C3x>HVX5BbP(x(W&>qOO6Gq z1g`{lhnAC3CNI3RY-}MbeFN&PoUk)H9i7cYJA6-NfY!tpY$i9%5yo;3R`*h945zSv zUuE``!*61nqT>7C6EE7=R4-ahN4y>S!Z-6fQ|&zVMW|v+Y=7)lERX#@ev)&k(z_gu zu>;n2jrlf1U8Sza+jx(927mnuMEq?cy7XOORjI zJE!d7u}5UxDG+**d=_8hr#v~>E>tU=OkJh>k=v22k>QcrWQuAZ*&i7a?G)>6&n9Ec zT72++Q5UH-@Y%bB<^Ch^-AA^HWavZI+M%5Vl^^Y8&bs(!pdys*r2kkHC%kMj6wYL884)RvU(mcwW;r-fbYx#K-&u^0ZUEt=7ldGF`7pWNdk}tN8)G(C5h4Gm{J;RlMV{5f-;5Vjp!Z z)AzvIZ~cTdct6zgl(qE-tA%yUTg5xc^SwFNxJiHfY!v5%2 ztcmlSLe6{kjMz)jg<&gnJ@7`L2bFHSg#HcdL^01G%gOtZgK*J*L)SoB?uMU4I$`A- zh~=xWs;RA&+F0>3Q;|7WtROSqC-JaOH9VVq@O+Q0!k=hYDMND@`G_cIX z@atHWRzyyK!LJS-3bhWGjua!(*|KAHG8}&=-o%~B{8WHS>lL8#ezE-aO?$cXCc5)y z_$I%g1{2g_1mV+U0z&_-m0@N2yA3TL##@o38 z>r(~%jV_YCtcrGD`XEsYU)223IoSsCvW?{w>~RmfMxSH$-i zniy!+w`yQx{?IyWAzN4rtWwqiZ*6e6Yi4eRHPK*7Hp3;{5WQUxqc-S4pOSmCkxv$0VP)EM5qdGa951m?g zOWjk3fw?|nh289YOMH5dSWD(=HT!}+5#RKa^u{<42&rgP01SG+vQYh2TdI#WvSRBU zXLiQEeUE_k7iT0p`ejJZ?U<7Lo~RA6^9`E!`UF zy-F0#3NvWDV)WNLXkn!}RpNF=3WYZNi)Q?lzAa-zpiKDVXa}-zT(wR6LG*CsNcd#v zLGbn9gTOs_?a_dCL^A5g&1IYK+4G%Ic9<()k zV5}RSL=WuTczo?9mTMEfXlwAr{+?AdWS_IsiIaaF$ubkN>NNE!zJ^~rBkg72<1fc% z$8tcYU5G53j}2ljUT+>X2MB!!y!{)J-Rqvd!DvSc#e2F zdBfg?vCh+JY)>H4F-gVy3yl;7PF;m|3+~%A!Sih#~pKEp0QSmnR zjY#iM?ZAbMNmyB?1R8|YNH6018^ls+^(`WQrZHcX(8yo~aEoB@ap-3F%gDcxok-+2 z!%N61(2UhKGaPf1{jQS*Z{3P$)IZ~UxH0|@(FH?nS%GVkZ}Ak;!Zt97Gm_;G81bNH?Re1GoLmJ zE8jYOh*8QsYQBmkb+6|l_QfZjhn_3=NL&CHuSLFr5>P?~-xzE&@A}I4{;{T64Xr$u z?Y)7`;xlhMZ?bn2_~|Baq}oPd{kYmdneA+gU5Zo-r-4+(1NDMOgQKY5**`oc+=i@9 z*FuZYS?h&zg@VDGL5c!m9mb*CMc%wHpA@m?Ad%ZWYwO`_(%N9r0* z^lVes+PBE)__;HI8F+%|k+OIt*2nX+43YSmh)6h2B*rAN*v$f=Dao32p1AOP^l7d5 zc2=je$bh5pAdpOsqw)9ZLGH;cTy+pWgI_{#aiupJ&?j0g>gKI5-ZcH@bnM$LywgC* zzw*vuTjJg7z2_}sy~ixMNE}rfw*1AczhN>kG{$!Dt7o#OJ3aD(CyfZ4x6KUl(e0wb zUN+6Ao{o=jUbHi@rhFTDF%qKP!^2lY1w##jgQ-2Q`)6gml2J6HT*g}&yNQ@8M?&pG z!FNOdh298L12tSOvOdy1S}gV`w$biQmVwD2uHDG9d5>yy>F~fk=q+pTN=+u3qY0)X8dlJQ?rewId$6CSH+uI8Q2oJ;5WhWBgy_y2ExSa85hsB@09!d#Qciwy?`L zaM}{JB2g_H(Ttk22EEA|^$*@O!{M|48olv0s6uPcc?x;QgJv|gwpt}wQy%(WOzH}@ z^BS_p8eeVSDQgfEbDI1VuX_WY#UAVq@S~~5IU=`eXpOL#R*UC%a@ZAO??>;E4aOJw zF-ETw&;c@${HdL^JuT3k z>Qw0F7Sg(6jxeuCUN(AWA)NLr%fP<5%NOyLNUBCYlDocz_-^dSYs+B8nT>5fhj)jk zwdcIq-Mq^>eoLvgU~c13jb{=VIN5KWhIJEIu5%) z9<7_UMBAnP1wwIv{Hf!#hMG@1f_~PQIL69q0iuj!ct>x;m$WWk=s#ljDGduqg+fs6l%t??hTjpwMR zk#`&XWvX=?Nv#_BPKRO>o#Okz*TR(@J4>*X^$o1UYx0$hE$RL7Mw@_juvNz1j3WLK z{y+RBuoPtmKdlFHG&|flk{rDkJr_G-uW$z9H`|&g-a~scp}ow&W|mEBhUI$~@CMZTQ2SWt~33_!s1<_WV>@o){~;r9#sPAGolGy1F*)NJc_=4fJuVTL2ePz2*pk@i zS>Y;?hs4)@j-=9>b!a^i8&j3NJa-=Qv&@8svVw$sPTrNPplA<~&X;NLXeG3p_$-fO z{H8&i>nz(umg!JIDiLsb>b^;IDgYK*WvI5;tdkErO$|zd5^w%6VLNWcoT%M zoNwVi6X@$&ASOpNpWcdS!2k3%#zCW=xewXyG)T#z1W#UW9kdQxd+D3$RyV6AQM%X2 zKRX92X9e#a&u5;(p6|f*rWMy-$5 z{5PJ0Q;>`6;VFLsukLO{Ks=!u>LxNU?{F@nWxkI6VGnDYL9UGaU^VrS3>Go3OT+We zXkL19dH63}EgxrpFq1)?tTl>K*7E?(Oew;VtVm!QVG}KJxVTG@y^d z=6-X$SM|nY$5`h!X@jdVf9Zk8P7A?lgBb(UM1JteDiDbgjpE>vz4A5)F`gz`O$n#mgHCT ziJUtZ+fhTcsX7Q<^{QG7|KJT|fgXz;B!^MZxI?AgvqZI4S6@e`dDq!*x3II}4YeOU zs6{M2I*u6XsgXR9T{z`{`_dMq+K(k;?GvL-Skx;Zx0-i2iN zXDlVwEZQ$JGJJ>}0NKLn;quX;v6c2dB&J^Yq1-{X4&lc?3o7h_ohlQw)lsdf9zk!K zN#2XI$UyB_6;^|0*lK^U7ENoXPC*B$82=keJLs5175qlzP($QViH-e&c&1dPvHB~K z=-=Zp^@`p^FRee;);okj%=)OGX}ItH+R~`xGeeP_SSNZ<_;V z5qvJXdEfLjFk4~&yr?cfvWv(6QueC@q1!XsdF+T&;bHaE<*d-xl)2b1=aARwXEJL~ z!#kl5*)#ruOH?E>p)l zjeQA!%nHPWWkGY<3J?67bx~DjWBYGH+{AD3^2!eE|JAWAwbVZY)t;^Q)syuR+5t7c zx&-@p7joi^p?5#RU!n-n7+IL<)A1MRiP!lz$VC0gBvC~D0cj)?*vJp`^*KV74~C)2gZ!ko#NXf3-sSPOD+|@Yb+acyr(z{Z#uIG~#ul zHxy--T2aqqwt}Fy`HW;Cd>Ge_*g8zGeEP>I&0BB zz3|4Lodx#Cv7OOj(Jj%*vGsP;$q8+}rVNc&bas+~rf{S^`7v6A)53crW1>%^*<-=z zj_9c9YxthdjcQm+nu7!92PHdc_ptB8hN7Po11GvoHr#8(jLe0r9YDg8{3$c=W3fMKH}z>+7x=+nTDs;Xf_$$2 zh3?Z$?H0Z-D;en*l!uCe1!I-5-K^uuMFw1C~)&SDp^M_{}D7QA&j-aI|YLAIPZQ@|-r#_yQ( z6Y~98B>aa&Ack36n$xz8@pqM1!TS#*`)Jq#t6~!^3Zgp*zo6+zktMK>e1OkDQ~XBi zshPE%dSOo{*4;lm4~@3^hpO$|i7pK{2ycpnV#VU8m56$XJk}HNDD!Feq3s{kcKR}G7mFF!M$2_a&w4Y=4;@IdiM z8wIMkm$hLMI_+dQPY%5fu^Vq=Ih=tcUmZ#H6moh={By>!j;=GNduD!jKbb1^Ia8SNzIORcMq_ssI` zO3BA9>F{QBQyKTjh+#1^!VAhJY$&K{$+!IIlb|3Di`6!kpp8jqX_jKOYo zlU5&J*t6)iCD8l7fufcY8Tv>WB4?==hzOqU46zSlMYzOzHN+W&CrW2L=(-XkQyLH6 zrPNtC8f}4%=v%T)Eky(EO4h+W(O;wY(fupg&+NBA%gZ_|q4-9zlhFl?%e`n{@|k~+ z^(2+oNo0m`_S@uIutDXs5r?;qSmt5K*sGkE(e}T@2V|FBnE5mYNqZq)k5`rR;A67J zrxI`cC((^PKuxxz-5i3q_*92H(6w2~1M0ivm2Zi?`WjZy0eD5!#5=7II>C!j`$9EY zn}{Aj=!cf1zpV#}&lzBxfqSoIg?pV0Fqw#ApT`PZmTU|KR6kmIPxVLj6VRw9*jX1M z1OA1LcoNwS`>N%T)4LL#R}F4(0KRdKb$THA3O`g^b9^2(H@ZbjtdOfYz6BCkVQ|s* zcwI_$5kClPW3a!;$TkC@q(a1ee?rXV6g>4_1{JA=T%A9D3>@)orw4M;0Q|5EI%)PP zJQudYP2Q*PF4-@za<)d_?~2CjaTXI3SArOXh2(JT!YY;O6ar^Sj_-Hg0hO$dKbRcZ zi*FzBdX*T!zsWZ9h&&hVotfx#(2uI72~qg|guZk|khKvw5N`vx8tH<1zbs2U49mGw=Yx@5av>`n7r zC9C^k<*MBns##^fMjZGRrIT8OIv{7Y%%CkBl(A|ieWme>S&3M;5grE~vs>$>3~}DU zBl|I!>+fVxeySeF_GakawQtqDY8uwKA?ikCbT8S7{y}GHpcEow&;fGuwsii5it@v2 zT97T|4Uqar@uB3q7zdZU$MY}1>eYaJMxSC0Zb2laCvYA28f zAc|j>Mn7yLnmvv8{ve!J;TFT4x8TK_$Ys_Y4*U^5mTk!lsm4#@fA<4CB@N!)nxjYJ zg*kw`l;b{6$f_B2it{AniRb=^_u<4!HzMmsCOoif;LG;~vtk!(>6(PsYCVv$6f95Z zg;?dr621C465>?O>I=v36z|IXnZYdDiX46fZ22_XpX5*b6D;j6^p;G{hcaZRs0Saa zi_dQfXins?5*|ijHp!AGRp6wG zm*gFgY>e{$yw0!WV+@i#!L7h5*)h}k?LVI6CRWq( zp`Qnd-jJGOlKoLKc1mte$?W-G;vfZZ#B?GA3*{x$Km9YL} zuhgZKv*bRKzfs=hb)Wr`k>oMQ$ysu=^tp_OoFii*ze>N!5t8vz>f}kz30N3?tsDGXh;M~Z zUU8^Le9BAzZz}^GmgZG9@x2tk$oH~Xb;>8Uico1qbb|leDl`AwD)JRMqAZ(SL#`lO zIX3r`du6$kT(tyS@dWL<^~VbFG=&q}3p|-Tox5M^UrS|p$wVsEyrlM*WO#jEp;jv1 zNj*NPzvXUjK2o=`rPLUc&CNXeoMPQ-pZ`}?+@%0FU#nZy+RgncqbnmWBP^9hWs`X% zqb8##d!LV@jN$V+;MV?<0ha z+g7UP$>wIZbt^EsSR%jO;{vp`ljp?0Bj_bO5^RgRN$+*#n(xp(g%b4d2eb)~wd zoG)0jyz3+0>4LRqt=Mx>iLS&j?yL_!blIWqsG8mB?u3fB`FlXl9U=lPz6o~4Gc zWN^;JI7od%S(l{(v}8dRF6DBiRIVo3iL=0I3&5YN6J1p&5ml9sb92GhDT?S5H@Xz~jJ2$Jca0R!=4W6z5 zt5O9#{a!_6o< zGyK0_9`HZ)f81Pn>|NUMFD)SB4{c87>QaHR2>+$pXkqSEo$Y00xw`aO1$yNgl7L7% z_qcwPQS;H3`^Ykz(4?1PmHLsmv)O3(!|~Ibjy(GjS#DOK?{6kr=Ld5BOhqHvfjoPR zCr@Futc|D56l^ugYXA5m`!L=kadHU#7xy`eI?VVB5B9aro!DQIwXxlJoV<$Wc%7Vj z0rd#d^9gY8wd6S|9PdVM`wMnI@EV0Uuw_m`B+tj{C{3ld(d4Zt@w7A;RS|Mzwdr#BghDH+*bt|O`U!dB9lXuIRsP|9O-`W_m(gfGA(<(5(k|MhKXy;6g5 z2N4ka$Y#`vku3)0?Iz#62fc8i^Cdd=Y^=O9!6m-L<~f$^F4K9ARBTn%(N!9wl@&vm ztN?=2iM#bhZ)u8N(*#`OCG^5laml0XL#wEQCB89!Z9UN=MlcR@$tLwTbHxYs7UZsl zkvj??QB;67MUJTho%KQ|n1JnlD!FWaARpg)JPUVWzdZ)#dlmfpZ~m86+Y(*zf!d4z zWzm1@^Inwbv?ACiJE5<=j+UI2S`JP4HVBK;60G0*@v2=6N|c%0s1?9dUSz9_uWm`c zU%@A78v21~8{^S8M)C~3@SdrKRFnzY%>muNL2jeo?;uovmD#7$GRZ8T3l5WmxmJl*_Q0!m z657`y#$Yk_%T46!x&*?n67`rB>>)o|aUr#sS`k#FvHBL(lRB$i@yzO|_QWr5C{aJ- zK_#Y=yLu+p(pl=KiT9c8nS{k_6!^wqu&nls%}Z)&u9XX9B#F((IK;TmZM62&=*Ro8 zx$Z`{-otAPnVP;u$D7LdjKbq(0(#<9ygxobgM5o;ZU|p&2qkyL;w3s}M|8W|jMPi; z3v4Uw?~IRXLq@R#bSJuLX}G9Vo2|;cFHHNh!50g{(?p&w P+-2R9RnM2;z#@To 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

9spR?)qqYet`laz(|sZbi;^ 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 + preflight: definition => definition.preflight, + createPlans(name, testCase) { + const task = createAudioTestTask(name, testCase) + return [{ + name: task.name, + definition: task, + metadata: { + input: fileURLToPath(task.input), + runtime: inject('fakemicRuntime').name, + }, + }] + }, + async execute({ plan, task, invokeHandler, runPreflight }) { + await runAudioTestSession({ + start() { + const microphoneInput = fileURLToPath(plan.definition.input) + return startFakemicRuntime(microphoneInput) + }, + async execute(session) { + await runPreflight({ + env, + runtime: session, + skip: (condition, note) => task.context.skip(Boolean(condition), note), + }) + await session.runtimePage.reload({ waitUntil: 'domcontentloaded' }) + await session.runtimePage.locator('[i-solar\\:alt-arrow-up-line-duotone]').first().waitFor({ state: 'visible', timeout: 30_000 }) + await session.runtimePage.bringToFront() + await session.runtimePage.waitForTimeout(750) + Object.assign(task.context, { audio: session }) + await invokeHandler() + }, + async recordArtifacts(session) { + const snapshot = await session.snapshot().catch(error => ({ + snapshotError: errorMessageFrom(error) ?? 'Unknown snapshot error', + })) + await task.context.annotate('pipeline.json', { + body: `${JSON.stringify(snapshot, null, 2)}\n`, + bodyEncoding: 'utf-8', + contentType: 'application/json', + }) + }, + }) + }, +}) + +/** Groups AIRI audio-input tests in the Vitest task tree. */ +export const describe = audioTestAPI.describe + +/** Defines an AIRI audio-input test for each selected target. */ +export const it = audioTestAPI.it + +/** Vitest expect with AIRI audio-input matchers installed. */ +export { expect } diff --git a/packages/testing-audio/src/expect-extend.test.ts b/packages/testing-audio/src/expect-extend.test.ts new file mode 100644 index 000000000..38e72d812 --- /dev/null +++ b/packages/testing-audio/src/expect-extend.test.ts @@ -0,0 +1,28 @@ +import type { AudioInputObservations } from './types' + +import { describe, it } from 'vitest' + +import { expect, installAudioInputMatchers } from './expect-extend' + +installAudioInputMatchers() + +describe('audio input matchers', () => { + it('normalizes transcription case, width, punctuation, and whitespace', async () => { + const session = createAudioInputSession(['Please, SAY hello!']) + + await expect(session).toHaveTranscriptions([ + ['please say hello'], + ]) + }) +}) + +function createAudioInputSession(transcriptions: string[]): AudioInputObservations { + return { + capturedTranscriptionAudio: async () => [], + streamingTranscriptionUpdates: async () => [], + transcriptionResults: async () => transcriptions, + completedSpans: async () => [], + waitForStreamingTranscriptionReady: async () => {}, + waitForVadReady: async () => {}, + } +} diff --git a/packages/testing-audio/src/expect-extend.ts b/packages/testing-audio/src/expect-extend.ts new file mode 100644 index 000000000..9814f6391 --- /dev/null +++ b/packages/testing-audio/src/expect-extend.ts @@ -0,0 +1,100 @@ +import type { AudioInputObservations } from './types' + +import { expect as vitestExpect } from 'vitest' + +export interface CapturedTranscriptionAudioExpectation { + count: number + minimumBytes: number +} + +export interface TranscriptionExpectationOptions { + /** @default 'exact' */ + match?: 'exact' | 'contains' +} + +declare module 'vitest' { + interface Assertion { + toHaveCapturedTranscriptionAudio: T extends AudioInputObservations + ? (expected: CapturedTranscriptionAudioExpectation) => Promise + : never + toHaveTranscriptions: T extends AudioInputObservations + ? ( + expected: ReadonlyArray>, + options?: TranscriptionExpectationOptions, + ) => Promise + : never + } +} + +/** Vitest expect with AIRI audio-input matcher types. */ +export const expect = vitestExpect + +/** + * Normalizes a transcript for speech-recognition comparison. + * + * @example + * normalizeTranscript(' Hello, AIRI! ') + * // => 'helloairi' + */ +function normalizeTranscript(value: string): string { + return value + .normalize('NFKC') + .toLocaleLowerCase() + .replace(/[^\p{L}\p{N}]+/gu, '') +} + +/** Installs asynchronous matchers for AIRI audio-input observations. */ +export function installAudioInputMatchers(): void { + vitestExpect.extend({ + async toHaveCapturedTranscriptionAudio( + session: AudioInputObservations, + expected: CapturedTranscriptionAudioExpectation, + ) { + const format = session.transcriptionCaptureFormat + if (!format) { + return { + pass: false, + message: () => 'The active transcription Provider does not expose uploaded audio.', + } + } + + const captures = await session.capturedTranscriptionAudio(expected.count) + const invalidCapture = captures.find((capture) => { + if (capture.format !== format || capture.data.byteLength < expected.minimumBytes) + return true + return format === 'wav' && new TextDecoder().decode(capture.data.subarray(0, 4)) !== 'RIFF' + }) + const pass = captures.length === expected.count && !invalidCapture + + return { + pass, + message: () => pass + ? 'Expected the session not to contain valid transcription audio.' + : `Expected ${expected.count} ${format} capture(s) with at least ${expected.minimumBytes} bytes.`, + } + }, + async toHaveTranscriptions( + session: AudioInputObservations, + expected: ReadonlyArray>, + options: TranscriptionExpectationOptions = {}, + ) { + const actual = await session.transcriptionResults(expected.length) + const normalizedActual = actual.map(normalizeTranscript) + const normalizedExpected = expected.map(alternatives => alternatives.map(normalizeTranscript)) + const match = options.match ?? 'exact' + const pass = normalizedActual.length === normalizedExpected.length + && normalizedActual.every((transcript, index) => ( + match === 'contains' + ? normalizedExpected[index].some(candidate => transcript.includes(candidate)) + : normalizedExpected[index].includes(transcript) + )) + + return { + pass, + message: () => pass + ? 'Expected the session not to contain the specified transcriptions.' + : `Expected transcriptions ${JSON.stringify(expected)}, but received ${JSON.stringify(actual)}.`, + } + }, + }) +} diff --git a/packages/testing-audio/src/index.ts b/packages/testing-audio/src/index.ts new file mode 100644 index 000000000..b2619c5eb --- /dev/null +++ b/packages/testing-audio/src/index.ts @@ -0,0 +1,10 @@ +export { describe, expect, it } from './describe' + +export type { + AudioInputObservations, + AudioInputPreflightCallback, + AudioInputPreflightContext, + AudioInputSession, + AudioInputTarget, + AudioInputTestCase, +} from './types' diff --git a/packages/testing-audio/src/runtimes/prepare-electron.ts b/packages/testing-audio/src/runtimes/prepare-electron.ts new file mode 100644 index 000000000..9195d65b5 --- /dev/null +++ b/packages/testing-audio/src/runtimes/prepare-electron.ts @@ -0,0 +1,44 @@ +import type { FakemicElectronPrepareContext } from '@proj-airi/vitest-plugin-fakemic' +import type { Page } from 'playwright' + +import type { AudioInputSession } from '../types' + +import { stubForBrowser } from '../setup/browser-probe' +import { createSession } from '../setup/session' + +/** Adapts a Fakemic Electron process into an AIRI desktop audio session. */ +export default async function prepareElectronRuntime(context: FakemicElectronPrepareContext): Promise { + await context.app.context().addInitScript(stubForBrowser) + const page = await waitForPage(context, (page) => { + const url = new URL(page.url()) + return url.pathname.endsWith('/index.html') && url.hash === '#/' + }) + await page.locator('[i-solar\\:alt-arrow-up-line-duotone]').first().waitFor({ state: 'visible', timeout: 30_000 }) + await page.evaluate(stubForBrowser) + + return createSession({ + electronApp: context.app, + page, + target: 'electron', + close: context.close, + }) +} + +async function waitForPage( + context: FakemicElectronPrepareContext, + predicate: (page: Page) => boolean, + timeoutMs = 60_000, +): Promise { + const deadline = Date.now() + timeoutMs + while (Date.now() < deadline) { + const page = context.app.windows().find(predicate) + if (page) { + await page.waitForLoadState('domcontentloaded') + return page + } + + await new Promise(resolveWait => setTimeout(resolveWait, 100)) + } + + throw new Error('Timed out while waiting for the Electron renderer') +} diff --git a/packages/testing-audio/src/runtimes/prepare-web.ts b/packages/testing-audio/src/runtimes/prepare-web.ts new file mode 100644 index 000000000..b8dea08b0 --- /dev/null +++ b/packages/testing-audio/src/runtimes/prepare-web.ts @@ -0,0 +1,20 @@ +import type { FakemicWebPrepareContext } from '@proj-airi/vitest-plugin-fakemic' + +import type { AudioInputSession } from '../types' + +import { stubForBrowser } from '../setup/browser-probe' +import { createSession } from '../setup/session' + +/** Adapts a Fakemic Chromium process into an AIRI Web audio session. */ +export default async function prepareWebRuntime(context: FakemicWebPrepareContext): Promise { + await context.context.addInitScript(stubForBrowser) + + const page = await context.context.newPage() + await page.goto(context.runtime.url) + + return createSession({ + page, + target: 'web', + close: context.close, + }) +} diff --git a/packages/testing-audio/src/setup/browser-probe.ts b/packages/testing-audio/src/setup/browser-probe.ts new file mode 100644 index 000000000..4dee09346 --- /dev/null +++ b/packages/testing-audio/src/setup/browser-probe.ts @@ -0,0 +1,204 @@ +import type { SerializedIOSpan } from '@proj-airi/stage-shared/types/io-trace' + +/** + * Installs passive browser probes before the application starts. + * + * Triggering workflow: + * + * `BrowserContext.addInitScript` + * -> {@link stubForBrowser} + * -> `window.fetch` + * -> `BroadcastChannel('io-tracer-channel')` + * + * Upstream: + * - `BrowserContext.addInitScript` + * + * Downstream: + * - `window.__airiAudioInputE2E` + */ +export function stubForBrowser() { + const state: BrowserAudioInputState = { spans: [], streamingTranscriptionReady: false, streamingTranscriptionUpdates: [], transcriptionAudio: [], transcriptionResults: [], vadReady: false } + window.__airiAudioInputE2E = state + + const originalConsoleInfo = console.info.bind(console) + console.info = (...values: unknown[]) => { + if (typeof values[0] === 'string' && values[0].startsWith('[Voice Input] vad-ready:')) + state.vadReady = true + originalConsoleInfo(...values) + } + + const originalFetch = window.fetch.bind(window) + + /** + * Copies each ASR upload and response while it forwards the request. + * + * Triggering workflow: + * + * `window.fetch` + * -> `POST /audio/transcriptions` + * -> captureFetch + * + * Upstream: + * - The OpenAI-compatible transcription Provider. + * + * Downstream: + * - `window.__airiAudioInputE2E` + * - The original `window.fetch` function. + */ + const captureFetch: typeof window.fetch = async (input, init) => { + const requestUrl = typeof input === 'string' + ? input + : input instanceof URL + ? input.href + : input.url + + const capturesTranscription = new URL(requestUrl, window.location.href).pathname.endsWith('/audio/transcriptions') + if (capturesTranscription && init?.body instanceof FormData) { + const file = init.body.get('file') + if (file instanceof Blob) { + state.transcriptionAudio.push({ + base64: new Uint8Array(await file.arrayBuffer()).toBase64(), + format: 'wav', + }) + } + } + + const response = await originalFetch(input, init) + if (capturesTranscription && response.ok) { + const payload = await response.clone().json() as { text?: unknown } + if (typeof payload.text === 'string') + state.transcriptionResults.push(payload.text) + } + + return response + } + + window.fetch = captureFetch + + const OriginalWebSocket = window.WebSocket + const audioChunksBySocket = new WeakMap() + const capturesAliyunNlsBySocket = new WeakMap() + const capturedSockets = new WeakSet() + + function capturePcmAudio(socket: WebSocket) { + const audioChunks = audioChunksBySocket.get(socket) + if (!audioChunks || capturedSockets.has(socket) || !audioChunks.length) + return + + const byteLength = audioChunks.reduce((total, chunk) => total + chunk.byteLength, 0) + if (byteLength < 8192) + return + + capturedSockets.add(socket) + const audio = new Uint8Array(byteLength) + let offset = 0 + for (const chunk of audioChunks) { + audio.set(chunk, offset) + offset += chunk.byteLength + } + state.transcriptionAudio.push({ base64: audio.toBase64(), format: 'pcm' }) + } + + class CaptureAliyunNlsWebSocket extends OriginalWebSocket { + constructor(url: string | URL, protocols?: string | string[]) { + super(url, protocols) + const target = new URL(url.toString(), window.location.href) + const capturesAliyunNls = target.hostname.startsWith('nls-gateway-') && target.hostname.endsWith('.aliyuncs.com') + capturesAliyunNlsBySocket.set(this, capturesAliyunNls) + + if (capturesAliyunNls) { + audioChunksBySocket.set(this, []) + this.addEventListener('open', () => { + state.streamingTranscriptionReady = true + }) + this.addEventListener('message', (event) => { + if (typeof event.data !== 'string') + return + + try { + const payload = JSON.parse(event.data) as { header?: { name?: string }, payload?: { result?: unknown } } + if (payload.header?.name === 'SentenceEnd' && typeof payload.payload?.result === 'string') + state.transcriptionResults.push(payload.payload.result) + } + catch { + // NLS can send non-transcription frames. The Provider handles those frames. + } + }) + } + } + + send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void { + const audioChunks = audioChunksBySocket.get(this) + if (capturesAliyunNlsBySocket.get(this) && audioChunks && typeof data !== 'string') { + if (data instanceof Blob) { + void data.arrayBuffer().then((buffer) => { + audioChunks.push(new Uint8Array(buffer)) + }) + } + else if (ArrayBuffer.isView(data)) { + audioChunks.push(new Uint8Array(data.buffer, data.byteOffset, data.byteLength)) + } + else { + audioChunks.push(new Uint8Array(data)) + } + capturePcmAudio(this) + } + + let outboundData: string | Blob | BufferSource + if (typeof data === 'string' || data instanceof Blob || data instanceof ArrayBuffer) { + outboundData = data + } + else if (ArrayBuffer.isView(data)) { + // WebSocket does not accept views backed by SharedArrayBuffer. The copy uses a regular ArrayBuffer. + outboundData = new Uint8Array(data.buffer, data.byteOffset, data.byteLength).slice() + } + else { + // ArrayBufferLike also includes SharedArrayBuffer. The copy keeps the original bytes in a supported buffer. + outboundData = new Uint8Array(data).slice() + } + + super.send(outboundData) + } + + close(code?: number, reason?: string): void { + const audioChunks = audioChunksBySocket.get(this) + if (capturesAliyunNlsBySocket.get(this) && audioChunks && !capturedSockets.has(this) && audioChunks.length) { + capturePcmAudio(this) + } + + super.close(code, reason) + } + } + + window.WebSocket = CaptureAliyunNlsWebSocket + + const channel = new BroadcastChannel('io-tracer-channel') + + /** + * Stores completed I/O spans for the case artifact. + * + * Triggering workflow: + * + * `BroadcastChannel('io-tracer-channel')` + * -> `message` + * -> captureSpan + * + * Upstream: + * - The AIRI I/O trace exporter. + * + * Downstream: + * - `window.__airiAudioInputE2E.spans` + */ + const captureSpan = (event: MessageEvent) => { + if (event.data?.type === 'span' && event.data.span?.ended) + state.spans.push(event.data.span as SerializedIOSpan) + } + + channel.addEventListener('message', captureSpan) +} + +/** Returns the completed browser spans that match the optional span name. */ +export function readCompletedSpans(name?: string) { + const spans = window.__airiAudioInputE2E?.spans ?? [] + return name ? spans.filter(span => span.name === name) : spans +} diff --git a/packages/testing-audio/src/setup/session.ts b/packages/testing-audio/src/setup/session.ts new file mode 100644 index 000000000..90481953e --- /dev/null +++ b/packages/testing-audio/src/setup/session.ts @@ -0,0 +1,116 @@ +import type { AudioCapture } from '@proj-airi/vitest-plugin-fakemic' +import type { ElectronApplication, Page } from 'playwright' + +import type { AudioInputSession, AudioInputTarget } from '../types' + +import { Buffer } from 'node:buffer' + +import { readCompletedSpans } from './browser-probe' + +/** Creates the runtime session and records its page diagnostics. */ +export function createSession(options: { + electronApp?: ElectronApplication + page: Page + target: AudioInputTarget + close: () => Promise + transcriptionCaptureFormat?: AudioCapture['format'] +}): AudioInputSession { + const diagnostics: string[] = [] + const observedPages = new WeakSet() + + function observePage(page: Page) { + if (observedPages.has(page)) + return + + observedPages.add(page) + page.on('console', (message) => { + const text = message.text() + const isAudioPipelineInfo = message.type() === 'info' + && (text.includes('[Hearing Pipeline]') || text.includes('[Voice Input]') || text.includes('transcription')) + if (['error', 'warning'].includes(message.type()) || isAudioPipelineInfo) + diagnostics.push(`[console:${message.type()}] ${text}`) + }) + page.on('pageerror', error => diagnostics.push(`[pageerror] ${error.message}`)) + } + + observePage(options.page) + + const session: AudioInputSession = { + electronApp: options.electronApp, + page: options.page, + runtimePage: options.page, + target: options.target, + transcriptionCaptureFormat: options.transcriptionCaptureFormat, + activatePage(page) { + observePage(page) + session.page = page + }, + async capturedTranscriptionAudio(count) { + try { + await options.page.waitForFunction(expectedCount => ( + (window.__airiAudioInputE2E?.transcriptionAudio.length ?? 0) >= expectedCount + ), count, { timeout: 60_000 }) + } + catch (error) { + const runtimeState = await options.page.evaluate(async () => ({ + activeModel: localStorage.getItem('settings/hearing/active-model'), + activeProvider: localStorage.getItem('settings/hearing/active-provider'), + devices: (await navigator.mediaDevices.enumerateDevices()).map(device => ({ + deviceId: device.deviceId, + kind: device.kind, + label: device.label, + })), + microphoneEnabled: localStorage.getItem('settings/audio/input/enabled'), + microphoneInput: localStorage.getItem('settings/audio/input'), + microphoneOffIconVisible: Boolean(document.querySelector('[i-ph\\:microphone-slash]')), + probeInstalled: Boolean(window.__airiAudioInputE2E), + streamingTranscriptionReady: window.__airiAudioInputE2E?.streamingTranscriptionReady ?? false, + url: window.location.href, + vadReady: window.__airiAudioInputE2E?.vadReady ?? false, + })) + throw new Error(`Timed out waiting for captured transcription audio: ${JSON.stringify({ diagnostics, runtimeState })}`, { cause: error }) + } + const capturedAudio = await options.page.evaluate(() => window.__airiAudioInputE2E?.transcriptionAudio ?? []) + return capturedAudio.map(audio => ({ + format: audio.format, + data: Buffer.from(audio.base64, 'base64'), + })) + }, + streamingTranscriptionUpdates: () => session.page.evaluate(() => window.__airiAudioInputE2E?.streamingTranscriptionUpdates ?? []), + async transcriptionResults(count) { + await options.page.waitForFunction(expectedCount => ( + (window.__airiAudioInputE2E?.transcriptionResults.length ?? 0) >= expectedCount + ), count, { timeout: 60_000 }) + return options.page.evaluate(() => window.__airiAudioInputE2E?.transcriptionResults ?? []) + }, + async completedSpans(name) { + const runtimeSpans = await options.page.evaluate(readCompletedSpans, name) + if (session.page === options.page) + return runtimeSpans + + const interactionSpans = await session.page.evaluate(readCompletedSpans, name) + return [...runtimeSpans, ...interactionSpans] + }, + async waitForVadReady() { + await options.page.waitForFunction(() => window.__airiAudioInputE2E?.vadReady === true, undefined, { timeout: 30_000 }) + }, + async waitForStreamingTranscriptionReady() { + await options.page.waitForFunction(() => window.__airiAudioInputE2E?.streamingTranscriptionReady === true, undefined, { timeout: 30_000 }) + }, + async snapshot() { + const runtimeState = await options.page.evaluate(() => window.__airiAudioInputE2E) + const interactionState = session.page === options.page + ? runtimeState + : await session.page.evaluate(() => window.__airiAudioInputE2E) + return { + spans: runtimeState?.spans ?? [], + streamingTranscriptionUpdates: interactionState?.streamingTranscriptionUpdates ?? [], + transcriptionResults: runtimeState?.transcriptionResults ?? [], + diagnostics: [...diagnostics], + } + }, + close: options.close, + } + + return session +} diff --git a/packages/testing-audio/src/types.ts b/packages/testing-audio/src/types.ts new file mode 100644 index 000000000..44ae685ba --- /dev/null +++ b/packages/testing-audio/src/types.ts @@ -0,0 +1,60 @@ +import type { SerializedIOSpan } from '@proj-airi/stage-shared/types/io-trace' +import type { AudioCapture, AudioCaptureFormat, AudioTestCase, AudioTestPreflightCallback, AudioTestSession } from '@proj-airi/vitest-plugin-fakemic' +import type { ElectronApplication, Page } from 'playwright' + +export const audioInputTargets = ['web', 'electron'] as const + +export type AudioInputTarget = (typeof audioInputTargets)[number] + +/** Values available when one case resolves its preflight callbacks. */ +export interface AudioInputPreflightContext { + /** Environment variables loaded for this case. */ + env: Readonly + /** Clean runtime that the configuration callback can prepare. */ + runtime: AudioInputSession + /** Skips this case when its environment does not satisfy a case constraint. */ + skip: (condition: unknown, note?: string) => void +} + +/** One optional case callback that resolves configuration from its environment. */ +export type AudioInputPreflightCallback = AudioTestPreflightCallback + +/** One AIRI audio-input test definition. */ +export type AudioInputTestCase = AudioTestCase + +/** Snapshot of the observable AIRI audio pipeline state. */ +export interface AudioInputSnapshot { + spans: SerializedIOSpan[] + streamingTranscriptionUpdates: string[] + transcriptionResults: string[] + diagnostics: string[] +} + +/** Observable audio values used by AIRI matchers. */ +export interface AudioInputObservations { + /** Capture format used by the active transcription Provider. */ + transcriptionCaptureFormat?: AudioCaptureFormat + capturedTranscriptionAudio: (count: number) => Promise + streamingTranscriptionUpdates: () => Promise + transcriptionResults: (count: number) => Promise + completedSpans: (name?: string) => Promise + /** Waits until the VAD audio graph is connected to the microphone stream. */ + waitForVadReady: () => Promise + /** Waits until a streaming transcription transport accepts microphone audio. */ + waitForStreamingTranscriptionReady: () => Promise +} + +/** Runtime handle for one AIRI audio-input test. */ +export interface AudioInputSession extends AudioInputObservations, AudioTestSession { + /** Electron application for Electron tasks. */ + electronApp?: ElectronApplication + /** Page used by case interactions. */ + page: Page + /** Page that owns the audio-input pipeline. */ + runtimePage: Page + /** Runtime selected for this concrete task. */ + target: AudioInputTarget + /** Selects the page used by subsequent case interactions. */ + activatePage: (page: Page) => void + snapshot: () => Promise +} diff --git a/packages/testing-audio/src/types/browser.d.ts b/packages/testing-audio/src/types/browser.d.ts new file mode 100644 index 000000000..4111bcdaa --- /dev/null +++ b/packages/testing-audio/src/types/browser.d.ts @@ -0,0 +1,30 @@ +import type { SerializedIOSpan } from '@proj-airi/stage-shared/types/io-trace' + +declare global { + interface BrowserAudioInputState { + spans: SerializedIOSpan[] + streamingTranscriptionReady: boolean + streamingTranscriptionUpdates: string[] + transcriptionAudio: Array<{ base64: string, format: 'pcm' | 'wav' }> + transcriptionResults: string[] + vadReady: boolean + } + + interface Window { + __airiAudioInputE2E?: BrowserAudioInputState + } + + // NOTICE: + // TypeScript 5.9 does not declare the Baseline 2025 Uint8Array Base64 methods. + // The test runs in current Playwright and Electron Chromium runtimes that implement this API. + // Source: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64 + // Remove this declaration when the TypeScript standard library includes the method. + interface Uint8Array { + toBase64: (options?: { + alphabet?: 'base64' | 'base64url' + omitPadding?: boolean + }) => string + } +} + +export {} diff --git a/packages/testing-audio/tsconfig.json b/packages/testing-audio/tsconfig.json new file mode 100644 index 000000000..8a4165aa3 --- /dev/null +++ b/packages/testing-audio/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "moduleResolution": "Bundler", + "types": [ + "node" + ], + "strict": true, + "noEmit": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true + }, + "include": [ + "cases/**/*.ts", + "src/**/*.ts", + "vitest.config.ts" + ] +} diff --git a/packages/testing-audio/vitest.config.ts b/packages/testing-audio/vitest.config.ts new file mode 100644 index 000000000..755058df2 --- /dev/null +++ b/packages/testing-audio/vitest.config.ts @@ -0,0 +1,48 @@ +import { join } from 'node:path' + +import fakemic, { electron, web } from '@proj-airi/vitest-plugin-fakemic' + +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + projects: [ + fakemic({ + name: 'audio-web', + include: ['cases/**/*.audio.test.ts', 'cases/**/*.audio.web.test.ts'], + runtime: web({ + name: 'web', + prepare: new URL('./src/runtimes/prepare-web.ts', import.meta.url).href, + url: 'http://127.0.0.1:4173/', + context: { permissions: ['microphone'] }, + preview: { + configFile: join(import.meta.dirname, '../../apps/stage-web/vite.config.ts'), + root: join(import.meta.dirname, '../../apps/stage-web'), + }, + }), + }), + fakemic({ + name: 'audio-electron', + include: ['cases/**/*.audio.test.ts', 'cases/**/*.audio.electron.test.ts'], + runtime: electron({ + name: 'electron', + prepare: new URL('./src/runtimes/prepare-electron.ts', import.meta.url).href, + entry: join(import.meta.dirname, '../../apps/stage-tamagotchi/out/main/index.js'), + args: ['--no-sandbox'], + cwd: join(import.meta.dirname, '../..'), + temporaryUserData: { + env: 'APP_USER_DATA_PATH', + prefix: 'airi-testing-audio-', + }, + }), + }), + { + extends: true, + test: { + name: 'unit', + include: ['src/**/*.test.ts'], + }, + }, + ], + }, +}) diff --git a/packages/vitest-plugin-fakemic/README.md b/packages/vitest-plugin-fakemic/README.md new file mode 100644 index 000000000..3fe966db6 --- /dev/null +++ b/packages/vitest-plugin-fakemic/README.md @@ -0,0 +1,32 @@ +# Vitest plugin for fake microphones + +This package supplies fake-microphone Web and Electron runtimes with Vitest project integration. + +Import the Vitest interface from the package root: + +```ts +import fakemic, { + createAudioTestAPI, + electron, + runAudioTestSession, + web, +} from '@proj-airi/vitest-plugin-fakemic' +``` + +`src/index.ts` owns project configuration, runtime launch, task collection, and preflight scheduling. `src/runner.ts` owns task execution. + +Runtime configuration contains only serializable values. A `prepare` module adapts the launched Playwright runtime into an application session. + +```ts +fakemic({ + name: 'audio-web', + include: ['cases/**/*.audio.test.ts', 'cases/**/*.audio.web.test.ts'], + runtime: web({ + name: 'web', + prepare: new URL('./prepare-web.ts', import.meta.url).href, + url: 'http://127.0.0.1:4173/', + }), +}) +``` + +Application packages own selectors, routes, probes, Provider settings, and prepare modules. diff --git a/packages/audio-input-e2e/package.json b/packages/vitest-plugin-fakemic/package.json similarity index 57% rename from packages/audio-input-e2e/package.json rename to packages/vitest-plugin-fakemic/package.json index aa561dd24..d79907289 100644 --- a/packages/audio-input-e2e/package.json +++ b/packages/vitest-plugin-fakemic/package.json @@ -1,22 +1,24 @@ { - "name": "@proj-airi/audio-input-e2e", + "name": "@proj-airi/vitest-plugin-fakemic", "type": "module", "version": "0.11.3", "private": true, - "description": "End-to-end audio input contracts for AIRI Web and Electron", + "description": "Fake microphone test runtime and Vitest integration", "author": { "name": "Moeru AI Project AIRI Team", "email": "airi@moeru.ai", "url": "https://github.com/moeru-ai" }, "license": "MIT", + "exports": "./src/index.ts", "scripts": { + "test": "vitest run", + "typecheck": "tsc --noEmit" }, "dependencies": { - "@pnpm/find-workspace-dir": "catalog:", - "@proj-airi/stage-shared": "workspace:^", "playwright": "catalog:", - "valibot": "catalog:" + "vite": "catalog:", + "vitest": "catalog:vitest" }, "devDependencies": { "@types/node": "catalog:" diff --git a/packages/vitest-plugin-fakemic/src/index.test.ts b/packages/vitest-plugin-fakemic/src/index.test.ts new file mode 100644 index 000000000..de7f9974c --- /dev/null +++ b/packages/vitest-plugin-fakemic/src/index.test.ts @@ -0,0 +1,91 @@ +import { + createAudioTestAPI, + createAudioTestTask, + runAudioTestSession, +} from '@proj-airi/vitest-plugin-fakemic' +import { describe, expect, it, vi } from 'vitest' + +const calls: string[] = [] +const audio = createAudioTestAPI< + { value: string, preflight?: readonly ((context: { value: string }) => void)[] }, + { value: string }, + { capturedValue: string }, + { value: string } +>({ + createPlans: (name, definition) => [{ + name: `mock: ${name}`, + definition, + metadata: { + input: '/fixtures/input.wav', + runtime: 'mock', + }, + }], + preflight: definition => definition.preflight, + async execute({ plan, task, invokeHandler, runPreflight }) { + await runPreflight({ value: 'preflight' }) + Object.assign(task.context, { + capturedValue: plan.definition.value, + }) + await invokeHandler() + }, +}) + +audio.describe('createAudioTestAPI', () => { + audio.it('runs preflight before a registered task', { + value: 'captured', + preflight: [({ value }) => calls.push(value)], + }, ({ capturedValue }) => { + expect(calls).toEqual(['preflight']) + expect(capturedValue).toBe('captured') + }) +}) + +describe('audio test tasks', () => { + it('creates one task for the current runtime project', () => { + const input = new URL('file:///audio/input.wav') + const task = createAudioTestTask('captures speech', { input }) + + expect(task).toEqual({ name: 'captures speech', input }) + }) + + it('records artifacts before it closes the session', async () => { + const calls: string[] = [] + const session = { + close: vi.fn(async () => { + calls.push('close') + }), + } + + await runAudioTestSession({ + start: async () => session, + execute: async () => { + calls.push('execute') + }, + recordArtifacts: async () => { + calls.push('record') + }, + }) + + expect(calls).toEqual(['execute', 'record', 'close']) + }) + + it('closes the session and keeps execution and cleanup failures', async () => { + const executionError = new Error('execution failed') + const closeError = new Error('close failed') + + const result = runAudioTestSession({ + start: async () => ({ + close: async () => { + throw closeError + }, + }), + execute: async () => { + throw executionError + }, + }) + + await expect(result).rejects.toMatchObject({ + errors: [executionError, closeError], + }) + }) +}) diff --git a/packages/vitest-plugin-fakemic/src/index.ts b/packages/vitest-plugin-fakemic/src/index.ts new file mode 100644 index 000000000..e6117a742 --- /dev/null +++ b/packages/vitest-plugin-fakemic/src/index.ts @@ -0,0 +1,420 @@ +import type { Browser, BrowserContext, ElectronApplication } from 'playwright' +import type { RunnerTestCase, TestAPI, TestContext } from 'vitest' +import type { UserWorkspaceConfig } from 'vitest/config' + +import { mkdtemp, rm } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { env } from 'node:process' +import { fileURLToPath } from 'node:url' + +import { chromium, _electron as playwrightElectron } from 'playwright' +import { preview } from 'vite' +import { describe, inject, TestRunner } from 'vitest' + +/** Supported encodings for captured audio. */ +export type AudioCaptureFormat = 'pcm' | 'wav' + +/** One audio payload captured from a tested runtime. */ +export interface AudioCapture { + format: AudioCaptureFormat + data: Uint8Array +} + +/** A session that owns one audio test runtime. */ +export interface AudioTestSession { + /** Releases the runtime and all resources that belong to the session. */ + close: () => Promise +} + +/** One callback that runs after a runtime starts and before its test handler. */ +export type AudioTestPreflightCallback = (context: Context) => void | Promise + +/** A runner-neutral audio test definition. */ +export interface AudioTestCase { + /** File-backed microphone input for the test. */ + input: URL + /** @default [] */ + preflight?: readonly AudioTestPreflightCallback[] +} + +/** One runnable task derived from an audio test case. */ +export interface AudioTestTask { + name: string + input: URL +} + +/** Lifecycle operations for one audio test session. */ +export interface RunAudioTestSessionOptions { + start: () => Promise + execute: (session: Session) => Promise + recordArtifacts?: (session: Session) => Promise +} + +/** Metadata that identifies an audio task in Vitest reports. */ +export interface AudioVitestTaskMetadata { + input: string + runtime: string +} + +declare module 'vitest' { + interface TaskMeta { + audioTest?: AudioVitestTaskMetadata + } +} + +/** + * One concrete audio task that the custom runner can execute. + * + * @param Definition - The concrete definition stored for this task. + */ +export interface AudioVitestPlan { + name: string + definition: Definition + metadata: AudioVitestTaskMetadata +} + +/** + * Test context exposed to an audio test callback. + * + * @param Context - Fields added by the concrete audio framework. + */ +export type AudioVitestTaskContext = TestContext & Context + +/** + * Callback for an audio task. + * + * @param Context - Fields added by the concrete audio framework. + */ +export type AudioTestHandler = ( + context: AudioVitestTaskContext, +) => void | Promise + +/** + * A Vitest-like test function that accepts an audio definition. + * + * @param Definition - The definition supplied by each test. + * @param Context - Fields exposed to the test callback. + */ +export interface AudioTestAPI { + (name: string, definition: Definition, handler: AudioTestHandler): void + only: AudioTestAPI + skip: AudioTestAPI + todo: AudioTestAPI + fails: AudioTestAPI +} + +/** + * Configuration for a package-owned audio test interface. + * + * @param Definition - The definition supplied by each test. + * @param Plan - One concrete task produced from that definition. + */ +export interface CreateAudioTestAPIOptions { + createPlans: (name: string, definition: Definition) => Array> + execute: (options: { + plan: AudioVitestPlan + task: RunnerTestCase + invokeHandler: () => Promise + runPreflight: (context: PreflightContext) => Promise + }) => Promise + preflight?: (definition: Definition) => readonly AudioTestPreflightCallback[] | undefined +} + +/** Serializable Web runtime configuration. */ +export interface FakemicWebRuntime { + kind: 'web' + name: string + prepare: string + url: string + launch?: Parameters[0] + context?: Parameters[0] + preview?: { + configFile: string + root: string + host?: string + port?: number + } +} + +/** Serializable Electron runtime configuration. */ +export interface FakemicElectronRuntime { + kind: 'electron' + name: string + prepare: string + entry: string + args?: string[] + cwd?: string + env?: Record + temporaryUserData?: { + env: string + prefix?: string + } +} + +/** Runtime selected by one Fakemic Vitest project. */ +export type FakemicRuntime = FakemicElectronRuntime | FakemicWebRuntime + +/** Context supplied to a Web prepare module. */ +export interface FakemicWebPrepareContext { + browser: Browser + context: BrowserContext + close: () => Promise + runtime: FakemicWebRuntime +} + +/** Context supplied to an Electron prepare module. */ +export interface FakemicElectronPrepareContext { + app: ElectronApplication + close: () => Promise + runtime: FakemicElectronRuntime +} + +/** Module that adapts a launched runtime into the application session. */ +export interface FakemicPrepareModule { + default: (context: Context) => Promise +} + +/** Configuration for one Fakemic Vitest project. */ +export interface FakemicPluginOptions { + include: string[] + name: string + runtime: FakemicRuntime + /** @default 180000 */ + testTimeout?: number + /** @default 120000 */ + hookTimeout?: number +} + +declare module 'vitest' { + interface ProvidedContext { + fakemicRuntime: FakemicRuntime + } +} + +interface FakemicTaskExecution { + run: (task: RunnerTestCase, invokeHandler: () => Promise) => Promise +} + +const registryKey = Symbol.for('airi.vitest-plugin-fakemic.executions') +const registryHost = globalThis as typeof globalThis & Record | undefined> + +// NOTICE: +// Vitest can load the runner and collected test modules through different module IDs. +// The global symbol gives both module instances access to the same task registry. +// Source: the Vitest ModuleRunner seam between the runner and collected test files. +// Remove this registry when Vitest provides a public task execution registry. +const fakemicTaskExecutions = registryHost[registryKey] ??= new WeakMap() + +/** Creates package-owned `describe` and `it` functions for an audio framework. */ +export function createAudioTestAPI( + options: CreateAudioTestAPIOptions, +): { + describe: typeof describe + it: AudioTestAPI +} { + const collector = TestRunner.createTaskCollector(function ( + this: object, + name: string, + definition: Definition, + handler: AudioTestHandler, + ) { + const plans = options.createPlans(name, definition) + const preflight = options.preflight?.(definition) ?? [] + + for (const plan of plans) { + const task = TestRunner.getCurrentSuite().task(plan.name, { + ...this, + meta: { + audioTest: plan.metadata, + }, + handler: async (context) => { + await handler(context as AudioVitestTaskContext) + }, + }) + + fakemicTaskExecutions.set(task, { + run: (runnerTask, invokeHandler) => options.execute({ + plan, + task: runnerTask, + invokeHandler, + async runPreflight(context) { + for (const callback of preflight) + await callback(context) + }, + }), + }) + } + }) + + return { + describe, + it: collector as TestAPI as AudioTestAPI, + } +} + +/** Creates a Web runtime descriptor for one Fakemic project. */ +export function web(options: Omit): FakemicWebRuntime { + return { kind: 'web', ...options } +} + +/** Creates an Electron runtime descriptor for one Fakemic project. */ +export function electron(options: Omit): FakemicElectronRuntime { + return { kind: 'electron', ...options } +} + +/** Configures a serial Node Vitest project for package-owned audio tests. */ +export default function fakemic(options: FakemicPluginOptions): UserWorkspaceConfig { + return { + test: { + name: options.name, + include: options.include, + environment: 'node', + runner: fileURLToPath(new URL('./runner.ts', import.meta.url)), + fileParallelism: false, + maxWorkers: 1, + testTimeout: options.testTimeout ?? 180_000, + hookTimeout: options.hookTimeout ?? 120_000, + provide: { + fakemicRuntime: options.runtime, + }, + }, + } +} + +/** Creates Chromium arguments for a non-looping file-backed microphone. */ +export function createChromiumFileMicrophoneArguments(microphoneInput: string): string[] { + return [ + '--use-fake-ui-for-media-stream', + '--use-fake-device-for-media-stream', + `--use-file-for-fake-audio-capture=${microphoneInput}%noloop`, + '--autoplay-policy=no-user-gesture-required', + ] +} + +/** + * Creates one runnable task from an audio case. + * + * @example + * createAudioTestTask('greets the user', { input }) + * // => { name: 'greets the user', input } + */ +export function createAudioTestTask( + name: string, + testCase: AudioTestCase, +): AudioTestTask { + return { + name, + input: testCase.input, + } +} + +/** Launches the runtime selected by the current Vitest project. */ +export async function startFakemicRuntime(microphoneInput: string): Promise { + const runtime = inject('fakemicRuntime') + if (runtime.kind === 'electron') + return startElectronFakemicRuntime(runtime, microphoneInput) + return startWebFakemicRuntime(runtime, microphoneInput) +} + +async function startWebFakemicRuntime(runtime: FakemicWebRuntime, microphoneInput: string): Promise { + const server = runtime.preview + ? await preview({ + configFile: runtime.preview.configFile, + root: runtime.preview.root, + preview: { + host: runtime.preview.host ?? '127.0.0.1', + port: runtime.preview.port ?? 4173, + strictPort: true, + }, + }) + : undefined + let browser: Browser | undefined + const close = async () => { + await browser?.close() + await server?.close() + } + + try { + browser = await chromium.launch({ + ...runtime.launch, + args: [...(runtime.launch?.args ?? []), ...createChromiumFileMicrophoneArguments(microphoneInput)], + }) + const context = await browser.newContext(runtime.context) + const module = await import(runtime.prepare) as FakemicPrepareModule + return await module.default({ browser, context, close, runtime }) + } + catch (error) { + await close() + throw error + } +} + +async function startElectronFakemicRuntime(runtime: FakemicElectronRuntime, microphoneInput: string): Promise { + const temporaryUserData = runtime.temporaryUserData + const userDataPath = temporaryUserData + ? await mkdtemp(join(tmpdir(), temporaryUserData.prefix ?? 'fakemic-electron-')) + : undefined + let app: ElectronApplication | undefined + const close = async () => { + await app?.close() + if (userDataPath) + await rm(userDataPath, { recursive: true, force: true }) + } + + try { + const launchEnvironment = Object.fromEntries( + Object.entries({ ...env, ...runtime.env }) + .filter((entry): entry is [string, string] => entry[1] !== undefined), + ) + if (temporaryUserData && userDataPath) + launchEnvironment[temporaryUserData.env] = userDataPath + + app = await playwrightElectron.launch({ + args: [runtime.entry, ...(runtime.args ?? []), ...createChromiumFileMicrophoneArguments(microphoneInput)], + cwd: runtime.cwd, + env: launchEnvironment, + }) + const launchedApp = app + const module = await import(runtime.prepare) as FakemicPrepareModule + return await module.default({ app: launchedApp, close, runtime }) + } + catch (error) { + await close() + throw error + } +} + +/** Runs one audio session and preserves execution and cleanup failures. */ +export async function runAudioTestSession( + options: RunAudioTestSessionOptions, +): Promise { + const session = await options.start() + const errors: unknown[] = [] + + try { + await options.execute(session) + } + catch (error) { + errors.push(error) + } + + try { + await options.recordArtifacts?.(session) + } + catch (error) { + errors.push(error) + } + + try { + await session.close() + } + catch (error) { + errors.push(error) + } + + if (errors.length === 1) + throw errors[0] + if (errors.length > 1) + throw new AggregateError(errors, 'The audio test and its cleanup produced multiple errors') +} diff --git a/packages/vitest-plugin-fakemic/src/runner.ts b/packages/vitest-plugin-fakemic/src/runner.ts new file mode 100644 index 000000000..41f46111e --- /dev/null +++ b/packages/vitest-plugin-fakemic/src/runner.ts @@ -0,0 +1,38 @@ +import type { RunnerTestCase } from 'vitest' + +import { TestRunner } from 'vitest' + +interface FakemicTaskExecution { + run: (task: RunnerTestCase, invokeHandler: () => Promise) => Promise +} + +const registryKey = Symbol.for('airi.vitest-plugin-fakemic.executions') +const registryHost = globalThis as typeof globalThis & Record | undefined> +const fakemicTaskExecutions = registryHost[registryKey] ??= new WeakMap() + +/** + * Runs package-owned audio tasks and delegates normal tasks to Vitest. + * + * Call stack: + * + * FakemicVitestRunner.runTask + * -> fakemic task execution + * -> {@link TestRunner.getTestFn} + */ +export default class FakemicVitestRunner extends TestRunner { + async runTask(task: RunnerTestCase): Promise { + const handler = TestRunner.getTestFn(task) + if (!handler) + throw new Error(`Vitest did not collect a handler for "${task.name}"`) + + const execution = fakemicTaskExecutions.get(task) + if (!execution) { + await handler() + return + } + + await execution.run(task, async () => { + await handler() + }) + } +} diff --git a/packages/vitest-plugin-fakemic/tsconfig.json b/packages/vitest-plugin-fakemic/tsconfig.json new file mode 100644 index 000000000..0f9b062fe --- /dev/null +++ b/packages/vitest-plugin-fakemic/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": [ + "ESNext" + ], + "rootDir": ".", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": [ + "node" + ], + "strict": true, + "noEmit": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts", + "vitest.config.ts" + ] +} diff --git a/packages/vitest-plugin-fakemic/vitest.config.ts b/packages/vitest-plugin-fakemic/vitest.config.ts new file mode 100644 index 000000000..cff5a5890 --- /dev/null +++ b/packages/vitest-plugin-fakemic/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + include: ['src/**/*.test.ts'], + runner: './src/runner.ts', + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9fe382b0..aafa2343a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -244,8 +244,8 @@ catalogs: specifier: 0.1.0-beta.19 version: 0.1.0-beta.19 '@moeru/eventa': - specifier: 1.0.0-beta.13 - version: 1.0.0-beta.13 + specifier: 1.0.0-beta.15 + version: 1.0.0-beta.15 '@moeru/std': specifier: 0.1.0-beta.17 version: 0.1.0-beta.17 @@ -1450,7 +1450,7 @@ importers: version: 3.8.1 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -1801,6 +1801,33 @@ importers: specifier: 'catalog:' version: 3.2.6(typescript@5.9.3) + apps/stage-pocket/ios/DerivedData/C7F38B99-FA7A-44C4-A739-DFE441C9AD8B/SourcePackages/checkouts/OSBarcodeLib-iOS: + devDependencies: + '@semantic-release/changelog': + specifier: ^6.0.0 + version: 6.0.3(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/commit-analyzer': + specifier: ^13.0.0 + version: 13.0.1(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/exec': + specifier: ^7.0.0 + version: 7.1.0(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/git': + specifier: ^10.0.0 + version: 10.0.1(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/github': + specifier: ^12.0.0 + version: 12.0.9(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/npm': + specifier: ^13.0.0 + version: 13.1.5(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/release-notes-generator': + specifier: ^14.0.0 + version: 14.1.1(semantic-release@25.0.9(typescript@5.9.3)) + semantic-release: + specifier: ^25.0.0 + version: 25.0.9(typescript@5.9.3) + apps/stage-tamagotchi: dependencies: '@date-fns/utc': @@ -1853,7 +1880,7 @@ importers: version: 11.3.2 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -2124,7 +2151,7 @@ importers: version: 3.0.2(electron@41.2.1) '@electron-toolkit/tsconfig': specifier: 'catalog:' - version: 2.0.0(@types/node@24.12.2) + version: 2.0.0(@types/node@25.6.0) '@electron-toolkit/utils': specifier: 'catalog:' version: 4.0.0(electron@41.2.1) @@ -2163,7 +2190,7 @@ importers: version: 3.1.0 '@intlify/unplugin-vue-i18n': specifier: 'catalog:' - version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) '@modelcontextprotocol/sdk': specifier: 'catalog:' version: 1.30.0(@cfworker/json-schema@4.1.1)(zod@4.4.3) @@ -2199,10 +2226,10 @@ importers: version: link:../../packages/ui-transitions '@proj-airi/unplugin-fetch': specifier: 'catalog:' - version: 0.2.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.2.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@proj-airi/unplugin-live2d-sdk': specifier: 'catalog:' - version: 0.1.7(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.1.7(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@types/audioworklet': specifier: 'catalog:' version: 0.0.97 @@ -2229,7 +2256,7 @@ importers: version: 2.10.3 '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': specifier: 'catalog:' version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) @@ -2262,7 +2289,7 @@ importers: version: 6.8.3 electron-vite: specifier: 'catalog:' - version: 5.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 5.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) get-port-please: specifier: 'catalog:' version: 3.2.0 @@ -2283,31 +2310,31 @@ importers: version: 2.2.6 unocss-preset-scrollbar: specifier: 'catalog:' - version: 4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) unplugin-info: specifier: 'catalog:' - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: 'catalog:' - version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-bundle-visualizer: specifier: 'catalog:' version: 1.2.1(rolldown@1.0.0-rc.16)(rollup@4.60.1) vite-plugin-mkcert: specifier: 'catalog:' - version: 2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-vue-devtools: specifier: 'catalog:' - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite-plugin-vue-layouts: specifier: 'catalog:' - version: 0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) vue-macros: specifier: 'catalog:' - version: 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) + version: 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: 'catalog:' version: 3.2.6(typescript@5.9.3) @@ -2334,7 +2361,7 @@ importers: version: 3.8.1 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -2719,7 +2746,7 @@ importers: version: 3.8.1 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -3440,25 +3467,6 @@ importers: specifier: 'catalog:' version: 0.0.97 - packages/audio-input-e2e: - dependencies: - '@pnpm/find-workspace-dir': - specifier: 'catalog:' - version: 1000.1.5 - '@proj-airi/stage-shared': - specifier: workspace:^ - version: link:../stage-shared - playwright: - specifier: 'catalog:' - version: 1.60.0 - valibot: - specifier: 'catalog:' - version: 1.4.2(typescript@5.9.3) - devDependencies: - '@types/node': - specifier: 'catalog:' - version: 24.12.2 - packages/audio-pipelines-transcribe: dependencies: '@moeru/std': @@ -3475,7 +3483,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0) crossws: specifier: 'catalog:' version: 0.4.5(srvx@0.11.22) @@ -3611,7 +3619,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0) builder-util-runtime: specifier: 'catalog:' version: 9.5.1 @@ -3639,7 +3647,7 @@ importers: version: 3.0.2(electron@41.2.1) '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -3657,7 +3665,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -3764,7 +3772,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -3776,7 +3784,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@xsai/shared-chat': specifier: 'catalog:' version: 0.5.0-beta.8 @@ -3785,7 +3793,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -3807,7 +3815,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@proj-airi/plugin-sdk': specifier: workspace:* version: link:../plugin-sdk @@ -3943,7 +3951,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) packages/server-shared: dependencies: @@ -3955,7 +3963,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -4070,7 +4078,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -4219,7 +4227,7 @@ importers: version: 3.0.2(electron@41.2.1) '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@nekopaw/tempora': specifier: 'catalog:' version: 0.4.0-alpha.1 @@ -4246,7 +4254,7 @@ importers: version: 3.8.1 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -4944,7 +4952,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@pixiv/three-vrm': specifier: 'catalog:' version: 3.5.2(@types/three@0.184.0)(three@0.184.0) @@ -5009,6 +5017,37 @@ importers: packages/stream-kit: {} + packages/testing-audio: + dependencies: + '@moeru/std': + specifier: 'catalog:' + version: 0.1.0-beta.17 + '@pnpm/find-workspace-dir': + specifier: 'catalog:' + version: 1000.1.5 + '@proj-airi/stage-shared': + specifier: workspace:^ + version: link:../stage-shared + '@proj-airi/stage-ui': + specifier: workspace:^ + version: link:../stage-ui + '@proj-airi/vitest-plugin-fakemic': + specifier: workspace:^ + version: link:../vitest-plugin-fakemic + playwright: + specifier: 'catalog:' + version: 1.60.0 + vite: + specifier: 'catalog:' + version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: + specifier: catalog:vitest + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@29.1.1(@noble/hashes@2.0.1)(canvas@3.2.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 24.12.2 + packages/ui: dependencies: '@moeru/std': @@ -5126,6 +5165,22 @@ importers: specifier: '>=66' version: 66.6.8 + packages/vitest-plugin-fakemic: + dependencies: + playwright: + specifier: 'catalog:' + version: 1.60.0 + vite: + specifier: 'catalog:' + version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: + specifier: catalog:vitest + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@29.1.1(@noble/hashes@2.0.1)(canvas@3.2.3))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 24.12.2 + plugins/airi-plugin-bilibili-laplace: dependencies: '@guiiai/logg': @@ -5176,7 +5231,7 @@ importers: dependencies: '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -5273,7 +5328,7 @@ importers: version: 1.2.4 '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -5333,7 +5388,7 @@ importers: version: 5.4.0(@opentelemetry/api@1.9.1) '@moeru/eventa': specifier: 'catalog:' - version: 1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) + version: 1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0) '@moeru/std': specifier: 'catalog:' version: 0.1.0-beta.17 @@ -5634,6 +5689,18 @@ packages: '@acemir/cssom@0.9.31': resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@actions/core@3.0.1': + resolution: {integrity: sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==} + + '@actions/exec@3.0.0': + resolution: {integrity: sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==} + + '@actions/http-client@4.0.1': + resolution: {integrity: sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==} + + '@actions/io@3.0.2': + resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} + '@agentclientprotocol/sdk@1.3.0': resolution: {integrity: sha512-i3h/efaeuMUFAO1HSfo97QZQnnvMd7wWBYtBsdL6UMZg3a78sk3Ffya5Xu7C7tYsXomXoDXJBAzQF2PcFKAhIQ==} peerDependencies: @@ -6664,6 +6731,10 @@ packages: '@codemirror/view@6.39.7': resolution: {integrity: sha512-3Vif9hnNHJnl2YgOtkR/wzGzhYcQ8gy3LGdUhkLUU8xSBbgsTxrE8he/CMTpeINm5TgxLe2FmzvF6IYQL/BSAg==} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@cryptography/aes@0.1.1': resolution: {integrity: sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg==} @@ -8203,8 +8274,8 @@ packages: web-worker: optional: true - '@moeru/eventa@1.0.0-beta.13': - resolution: {integrity: sha512-zar2haIEkttvDJkBMSv4nEjo3OMhePDwr65nOBJFb6rXLbUjZQ+El6OuPDQZMbuxA+pcKwZhOT6AvamNXxjHfQ==} + '@moeru/eventa@1.0.0-beta.15': + resolution: {integrity: sha512-isjbOHeQuZJmlYJAQ6C28awXa4lpSdSEi/YPHrMuZQADHKDDu6O2R2oUclBiLVWM0Ut8R4WJFY8uLRuZP6Hq6g==} peerDependencies: '@tauri-apps/api': '>=2' electron: '>=39' @@ -8426,6 +8497,60 @@ packages: '@nxg-org/mineflayer-util-plugin@1.8.4': resolution: {integrity: sha512-hPaCZxU0Aq+gUSi/l6x7n32hUG6bnDugAMoQXD2dFE/gyNkmRSpmgH5+Y6G41w3H8P3Nl++upGCOlaxvZ7RuoA==} + '@octokit/auth-token@6.0.0': + resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} + engines: {node: '>= 20'} + + '@octokit/core@7.0.7': + resolution: {integrity: sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==} + engines: {node: '>= 20'} + + '@octokit/endpoint@11.0.4': + resolution: {integrity: sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==} + engines: {node: '>= 20'} + + '@octokit/graphql@9.0.4': + resolution: {integrity: sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==} + engines: {node: '>= 20'} + + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} + + '@octokit/openapi-types@28.0.0': + resolution: {integrity: sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==} + + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-retry@8.1.1': + resolution: {integrity: sha512-VCVvZ/R1+u3WuiBWpNavZ0mY4aaJNAsENrpBP9aLSR2QyOpQgd7DhM5j4AW7z4MQpnJYgwBPf0XqPQoNBRdQwg==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': '>=7' + + '@octokit/plugin-throttling@11.0.5': + resolution: {integrity: sha512-LIdrkrUv+DWbKeg/49rGuFJ3SU0d3hUS+B4MhNZLepBoNUFXms8Ic9edJjrlx+zycqJHjrMRudVpVb/bAXM2Lw==} + engines: {node: '>= 20'} + peerDependencies: + '@octokit/core': ^7.0.0 + + '@octokit/request-error@7.1.1': + resolution: {integrity: sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==} + engines: {node: '>= 20'} + + '@octokit/request@10.0.13': + resolution: {integrity: sha512-v2269YxL9Yf+x3d+gRI63FP0vFQEiWgLyBzxe/Y+0yFDg2B/Tzf5dhh9VNfccVAQnfcfwQWyk/y6Bn7rUXXs7A==} + engines: {node: '>= 20'} + + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + + '@octokit/types@17.0.0': + resolution: {integrity: sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==} + '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} @@ -10676,6 +10801,59 @@ packages: resolution: {integrity: sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@semantic-release/changelog@6.0.3': + resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + + '@semantic-release/commit-analyzer@13.0.1': + resolution: {integrity: sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' + + '@semantic-release/error@3.0.0': + resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} + engines: {node: '>=14.17'} + + '@semantic-release/error@4.0.0': + resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} + engines: {node: '>=18'} + + '@semantic-release/exec@7.1.0': + resolution: {integrity: sha512-4ycZ2atgEUutspPZ2hxO6z8JoQt4+y/kkHvfZ1cZxgl9WKJId1xPj+UadwInj+gMn2Gsv+fLnbrZ4s+6tK2TFQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=24.1.0' + + '@semantic-release/git@10.0.1': + resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + + '@semantic-release/github@12.0.9': + resolution: {integrity: sha512-ODIqb0V3QqndipryEEiaBxUQCFjvv7Oese5Dt4omMGa60YRNEW0Sx3K+zri0uac2Y6S9nOlMehciWIzvvRCTGQ==} + engines: {node: ^22.14.0 || >= 24.10.0} + peerDependencies: + semantic-release: '>=24.1.0' + + '@semantic-release/npm@13.1.5': + resolution: {integrity: sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==} + engines: {node: ^22.14.0 || >= 24.10.0} + peerDependencies: + semantic-release: '>=20.1.0' + + '@semantic-release/release-notes-generator@14.1.1': + resolution: {integrity: sha512-Pbd2e2XRMUD0OxehHpgd5/YghsE76cddkRHSoDvKLK+OCy4Ewxn49rWR631MEUU01lgwF/uyVXvbnVuu6+Z6VA==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' + '@shikijs/core@3.23.0': resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} @@ -10751,6 +10929,10 @@ packages: resolution: {integrity: sha512-sUKOu2lb5vGIWADNNLpscyj07DAeQZU3KLbnE2Tj53tW6BbDQKMly2CCfnR4oYzqtRELCPWfwaPg+Q0T8qfKBg==} deprecated: Contains a breaking change that should be a major version bump + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} + '@sindresorhus/base62@1.0.0': resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} @@ -10763,6 +10945,10 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@snazzah/davey-android-arm-eabi@0.1.11': resolution: {integrity: sha512-T1RYbNYKN6tLOcGIDKJd8OI6FBSEemwL7DOYdTMmhqfhhMr3YVN8WOhfoxGg63OcnpTN2e2c5tdY2bAx25RmQQ==} engines: {node: '>= 10'} @@ -11271,6 +11457,9 @@ packages: '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -12335,6 +12524,18 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-base@9.0.0: + resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} + engines: {node: '>= 20'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + aggregate-error@5.0.0: + resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} + engines: {node: '>=18'} + ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -12389,6 +12590,10 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -12445,6 +12650,9 @@ packages: args-tokenizer@0.3.0: resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} + argv-formatter@1.0.0: + resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} @@ -12465,6 +12673,9 @@ packages: resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} @@ -12647,6 +12858,9 @@ packages: bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + before-after-hook@4.0.0: + resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} + best-effort-json-parser@1.4.0: resolution: {integrity: sha512-gYmXQicIXaaspBdCLqok3t0JXYdi3Cr9oIgYh2+9rEWiNhLvi/89cguCWXZJWp0FgBR6YoEE9YkbZEfqKdqs+Q==} @@ -12840,6 +13054,9 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -12970,6 +13187,10 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + camelcase@4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} @@ -13009,6 +13230,10 @@ packages: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -13020,6 +13245,10 @@ packages: change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -13082,6 +13311,14 @@ packages: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + clean-stack@5.3.0: + resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} + engines: {node: '>=14.16'} + cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -13094,6 +13331,11 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -13102,6 +13344,10 @@ packages: resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} engines: {node: '>=18.20'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -13113,10 +13359,17 @@ packages: cliss@0.0.2: resolution: {integrity: sha512-6rj9pgdukjT994Md13JCUAgTk91abAKrygL9sAvmHY4F6AKMOV8ccGaxhUUfcBuyg3sundWnn3JE0Mc9W6ZYqw==} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} @@ -13132,10 +13385,16 @@ packages: resolution: {integrity: sha512-Zvxo5inxwvoGMI0R+cXV+5nVbl/Gw7zYV1Msn9mn7loC6CK941CjvsBplgClJV83T4UXID+SXhtfVulfaBat5w==} engines: {node: '>=22.10.0'} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -13234,6 +13493,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-version@0.1.2: resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} engines: {node: '>=0.10.0'} @@ -13286,6 +13548,32 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + + conventional-changelog-angular@8.3.1: + resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} + engines: {node: '>=18'} + + conventional-changelog-writer@8.4.0: + resolution: {integrity: sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==} + engines: {node: '>=18'} + hasBin: true + + conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} + + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} + engines: {node: '>=18'} + hasBin: true + + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -13327,6 +13615,15 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cosmiconfig@9.0.2: + resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + crc@3.8.0: resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} @@ -13355,6 +13652,10 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + css-line-break@2.1.0: resolution: {integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==} @@ -13686,6 +13987,10 @@ packages: dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + direction@2.0.1: resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} hasBin: true @@ -13735,6 +14040,10 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dot-prop@9.0.0: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} @@ -13965,6 +14274,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -14079,6 +14391,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} @@ -14134,6 +14449,10 @@ packages: resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} engines: {node: '>=20.19.0'} + env-ci@11.2.0: + resolution: {integrity: sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==} + engines: {node: ^18.17 || >=20.6.1} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -14521,6 +14840,14 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + exif-parser@0.1.12: resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} @@ -14647,6 +14974,14 @@ packages: fflate@0.8.3: resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -14722,6 +15057,10 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} + firefox-profile@4.7.0: resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} engines: {node: '>=18'} @@ -14877,6 +15216,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} + functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} @@ -14941,6 +15284,14 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-tsconfig@4.13.7: resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} @@ -14959,6 +15310,9 @@ packages: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} hasBin: true + git-log-parser@1.2.1: + resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} + git-up@8.1.1: resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} @@ -15114,6 +15468,11 @@ packages: crossws: optional: true + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} + engines: {node: '>=0.4.7'} + hasBin: true + har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} @@ -15123,6 +15482,10 @@ packages: engines: {node: '>=6'} deprecated: this library is no longer supported + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -15210,6 +15573,9 @@ packages: resolution: {integrity: sha512-MXaWVJVeAgNzLoEAjbsu+cwcN9XhvgURDLJqmDUXXEYO7DUV6eK8LK3Fy6mLgfP73GdtVjTtZan6gj7xhPUrLA==} hasBin: true + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + histoire@1.0.0-beta.1: resolution: {integrity: sha512-hzhFiqlL9Ko1B2APCamGIchM3Bjng5+CTX7kLL1q/NB2Lp4Uqpe4ZZicc7RU4CTCe4Vj7Q/Eb3UE/IacL1Ta5g==} hasBin: true @@ -15233,6 +15599,10 @@ packages: resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} engines: {node: '>=16.9.0'} + hook-std@4.0.0: + resolution: {integrity: sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==} + engines: {node: '>=20'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -15243,6 +15613,14 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@9.0.3: + resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==} + engines: {node: ^20.17.0 || >=22.9.0} + html-encoding-sniffer@6.0.0: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -15283,6 +15661,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-proxy-agent@9.1.0: + resolution: {integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==} + engines: {node: '>= 20'} + http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -15295,10 +15677,22 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + https-proxy-agent@9.1.0: + resolution: {integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==} + engines: {node: '>= 20'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} engines: {node: ^8.11.2 || >=10} @@ -15348,10 +15742,18 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + import-from-esm@1.3.4: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} + import-from-esm@2.0.0: + resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} + engines: {node: '>=18.20'} + import-in-the-middle@3.0.0: resolution: {integrity: sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg==} engines: {node: '>=18'} @@ -15367,10 +15769,18 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -15533,6 +15943,10 @@ packages: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} engines: {node: '>=0.10.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -15574,6 +15988,14 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -15581,6 +16003,10 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -15629,6 +16055,10 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + issue-parser@7.0.2: + resolution: {integrity: sha512-7atWPjhGEIX3JEtMrOYd8TKzboYlq+5sNbdl9POiLYOI14G5HZiQbZP0Xj5EZdrufQVXfJlpTV0hys0CuxwxZw==} + engines: {node: ^18.17 || >=20.6.1} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -15653,6 +16083,10 @@ packages: engines: {node: '>=10'} hasBin: true + java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -15733,6 +16167,12 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -15755,6 +16195,9 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-with-bigint@3.5.10: + resolution: {integrity: sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -16000,6 +16443,10 @@ packages: resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} engines: {node: '>=18.0.0'} + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + local-pkg@1.1.2: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} @@ -16019,9 +16466,15 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -16077,6 +16530,9 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -16140,6 +16596,10 @@ packages: magicli@0.0.8: resolution: {integrity: sha512-x/eBenweAHF+DsYy172sK4doRxZl0yrJnfxhLJiN7H6hPM3Ya0PfI6uBZshZ3ScFFSQD7HXgBqMdbnXKEZsO1g==} + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -16187,6 +16647,17 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + marked-terminal@7.3.0: + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <16' + + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} @@ -16257,6 +16728,10 @@ packages: mediabunny@1.40.1: resolution: {integrity: sha512-HU/stGzAkdWaJIly6ypbUVgAUvT9kt39DIg0IaErR7/1fwtTmgUYs4i8uEPYcgcjPjbB9gtBmUXOLnXi6J2LDw==} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + meow@14.1.0: resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} engines: {node: '>=20'} @@ -16410,10 +16885,19 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + mime@4.1.0: + resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} + engines: {node: '>=16'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -16657,6 +17141,12 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nerf-dart@1.0.0: + resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} + neverthrow@8.2.0: resolution: {integrity: sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==} engines: {node: '>=18'} @@ -16689,6 +17179,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -16747,6 +17241,14 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-package-data@8.0.0: + resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} + engines: {node: ^20.17.0 || >=22.9.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -16755,10 +17257,93 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} + normalize-url@9.0.1: + resolution: {integrity: sha512-ARftfC5HdUNu9jJeL8pHj8debUIHA2b91FizCoMzY4lG6dDX13jdvTK0TBe24IBDRf2HvJSzzwEPvmbkQWHRSg==} + engines: {node: '>=20'} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + npm@11.19.0: + resolution: {integrity: sha512-SDd/hHg3KqHE5Ht2NHWxNYNtqCQ2pXAPLl6OtQhPyED5PHsRfrOtO199MZTIG2cQoQ1ZRI9t28shrD+2cr3AAw==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/metavuln-calculator' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -16831,6 +17416,10 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -16919,6 +17508,18 @@ packages: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} + p-each-series@3.0.0: + resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} + engines: {node: '>=12'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + p-limit@1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} @@ -16951,6 +17552,18 @@ packages: resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} + p-reduce@2.1.0: + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} + + p-reduce@3.0.0: + resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} + engines: {node: '>=12'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -16975,6 +17588,10 @@ packages: pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-gitignore@2.0.0: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} @@ -16982,10 +17599,26 @@ packages: parse-imports-exports@0.2.4: resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + parse-json@7.1.1: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} @@ -17000,6 +17633,15 @@ packages: resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} engines: {node: '>=14.13.0'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -17032,6 +17674,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -17049,6 +17695,10 @@ packages: path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + path-type@6.0.0: resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} engines: {node: '>=18'} @@ -17131,6 +17781,10 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -17196,6 +17850,10 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -17354,6 +18012,10 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + prism-media@1.3.5: resolution: {integrity: sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==} peerDependencies: @@ -17495,6 +18157,15 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-agent-negotiate@1.1.0: + resolution: {integrity: sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==} + engines: {node: '>= 20'} + peerDependencies: + kerberos: ^2.0.0 + peerDependenciesMeta: + kerberos: + optional: true + prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} @@ -17599,6 +18270,22 @@ packages: resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} hasBin: true + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-package-up@12.0.0: + resolution: {integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==} + engines: {node: '>=20'} + + read-pkg@10.1.0: + resolution: {integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==} + engines: {node: '>=20'} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + readable-stream@1.0.34: resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} @@ -17777,6 +18464,14 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -17955,9 +18650,18 @@ packages: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} + semantic-release@25.0.9: + resolution: {integrity: sha512-bxve7csK0/Txr++CkfrmV+X1r4jqiSOw2WsSad9E2S68R+ZfLBwDn8IceM8WfiOmKQIHgsQc1cNA8Dzg7U75pg==} + engines: {node: ^22.14.0 || >= 24.10.0} + hasBin: true + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -18053,6 +18757,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -18080,6 +18788,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -18168,12 +18880,21 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawn-error-forwarder@1.0.0: + resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} + spawn-sync@1.0.15: resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} @@ -18190,6 +18911,9 @@ packages: split-skip@0.0.2: resolution: {integrity: sha512-weHOi8BolsDnGIwhhWHbA+wKSuSpvWwjRrdj8SdbIIis2vSwOE37CQP8x3EleuzxanUr3AK8BdUy4MkiOULPZg==} + split2@1.0.0: + resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -18273,6 +18997,9 @@ packages: store2@2.14.4: resolution: {integrity: sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw==} + stream-combiner2@1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + streamx@2.28.0: resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} @@ -18288,6 +19015,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} + string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -18324,6 +19055,10 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-bom@5.0.0: resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} engines: {node: '>=12'} @@ -18336,6 +19071,14 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@4.1.1: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} @@ -18396,6 +19139,10 @@ packages: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} + superjson@2.2.6: resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} @@ -18404,10 +19151,18 @@ packages: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -18440,6 +19195,10 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -18473,6 +19232,10 @@ packages: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -18484,6 +19247,10 @@ packages: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} + tempy@3.2.0: + resolution: {integrity: sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==} + engines: {node: '>=14.16'} + terser@5.46.1: resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} @@ -18539,12 +19306,19 @@ packages: through2@0.6.5: resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + timm@1.7.1: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} @@ -18628,6 +19402,10 @@ packages: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} + traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -18714,6 +19492,10 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + turbo@2.9.6: resolution: {integrity: sha512-+v2QJey7ZUeUiuigkU+uFfklvNUyPI2VO2vBpMYJA+a1hKFLFiKtUYlRHdb3P9CrAvMzi0upbjI4WT+zKtqkBg==} hasBin: true @@ -18733,6 +19515,14 @@ packages: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -18741,6 +19531,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.8.0: + resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==} + engines: {node: '>=20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -18806,6 +19600,11 @@ packages: ufo@1.6.3: resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + uhyphen@0.2.0: resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} @@ -18860,6 +19659,10 @@ packages: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -18872,10 +19675,18 @@ packages: resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -18895,6 +19706,10 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + unist-builder@4.0.0: resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} @@ -18922,6 +19737,9 @@ packages: unist-util-visit@5.1.0: resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -19194,6 +20012,10 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -19248,6 +20070,9 @@ packages: typescript: optional: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -19796,6 +20621,9 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wordwrapjs@3.0.0: resolution: {integrity: sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==} engines: {node: '>=4.0.0'} @@ -20012,17 +20840,33 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs-parser@7.0.0: resolution: {integrity: sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==} + yargs@16.2.2: + resolution: {integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==} + engines: {node: '>=10'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.1.0: + resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} @@ -20078,6 +20922,22 @@ snapshots: '@acemir/cssom@0.9.31': {} + '@actions/core@3.0.1': + dependencies: + '@actions/exec': 3.0.0 + '@actions/http-client': 4.0.1 + + '@actions/exec@3.0.0': + dependencies: + '@actions/io': 3.0.2 + + '@actions/http-client@4.0.1': + dependencies: + tunnel: 0.0.6 + undici: 6.24.1 + + '@actions/io@3.0.2': {} + '@agentclientprotocol/sdk@1.3.0(zod@4.4.3)': dependencies: zod: 4.4.3 @@ -21507,6 +22367,9 @@ snapshots: style-mod: 4.1.3 w3c-keyname: 2.2.8 + '@colors/colors@1.5.0': + optional: true + '@cryptography/aes@0.1.1': {} '@csstools/color-helpers@5.1.0': {} @@ -21700,9 +22563,9 @@ snapshots: dependencies: electron: 41.2.1 - '@electron-toolkit/tsconfig@2.0.0(@types/node@24.12.2)': + '@electron-toolkit/tsconfig@2.0.0(@types/node@25.6.0)': dependencies: - '@types/node': 24.12.2 + '@types/node': 25.6.0 '@electron-toolkit/utils@4.0.0(electron@41.2.1)': dependencies: @@ -22639,31 +23502,6 @@ snapshots: - supports-color - typescript - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0)) - '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3))) - '@intlify/shared': 11.3.2 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.2)(@vue/compiler-dom@3.5.32)(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - debug: 4.4.3(supports-color@10.2.2) - fast-glob: 3.3.3 - pathe: 2.0.3 - picocolors: 1.1.1 - unplugin: 2.3.11 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vue: 3.5.32(typescript@5.9.3) - optionalDependencies: - vue-i18n: 11.3.2(vue@3.5.32(typescript@5.9.3)) - transitivePeerDependencies: - - '@vue/compiler-dom' - - eslint - - rollup - - supports-color - - typescript - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.1(jiti@2.7.0))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.7.0)) @@ -23060,7 +23898,7 @@ snapshots: h3: 2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)) web-worker: 1.5.0 - '@moeru/eventa@1.0.0-beta.13(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0)': + '@moeru/eventa@1.0.0-beta.15(electron@40.8.5)(h3@2.0.1-rc.25)(web-worker@1.5.0)': dependencies: nanoid: 6.0.1 picomatch: 4.0.4 @@ -23069,7 +23907,7 @@ snapshots: h3: 2.0.1-rc.25 web-worker: 1.5.0 - '@moeru/eventa@1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0)': + '@moeru/eventa@1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.20(crossws@0.4.5(srvx@0.11.22)))(hono@4.12.2)(web-worker@1.5.0)': dependencies: nanoid: 6.0.1 picomatch: 4.0.4 @@ -23079,7 +23917,7 @@ snapshots: hono: 4.12.2 web-worker: 1.5.0 - '@moeru/eventa@1.0.0-beta.13(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0)': + '@moeru/eventa@1.0.0-beta.15(electron@41.2.1)(h3@2.0.1-rc.25)(hono@4.11.3)(web-worker@1.5.0)': dependencies: nanoid: 6.0.1 picomatch: 4.0.4 @@ -23285,6 +24123,72 @@ snapshots: '@nxg-org/mineflayer-util-plugin@1.8.4': {} + '@octokit/auth-token@6.0.0': {} + + '@octokit/core@7.0.7': + dependencies: + '@octokit/auth-token': 6.0.0 + '@octokit/graphql': 9.0.4 + '@octokit/request': 10.0.13 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + before-after-hook: 4.0.0 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@11.0.4': + dependencies: + '@octokit/types': 17.0.0 + universal-user-agent: 7.0.3 + + '@octokit/graphql@9.0.4': + dependencies: + '@octokit/request': 10.0.13 + '@octokit/types': 17.0.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@27.0.0': {} + + '@octokit/openapi-types@28.0.0': {} + + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/types': 16.0.0 + + '@octokit/plugin-retry@8.1.1(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@11.0.5(@octokit/core@7.0.7)': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/types': 17.0.0 + bottleneck: 2.19.5 + + '@octokit/request-error@7.1.1': + dependencies: + '@octokit/types': 17.0.0 + + '@octokit/request@10.0.13': + dependencies: + '@octokit/endpoint': 11.0.4 + '@octokit/request-error': 7.1.1 + '@octokit/types': 17.0.0 + content-type: 2.0.0 + json-with-bigint: 3.5.10 + universal-user-agent: 7.0.3 + + '@octokit/types@16.0.0': + dependencies: + '@octokit/openapi-types': 27.0.0 + + '@octokit/types@17.0.0': + dependencies: + '@octokit/openapi-types': 28.0.0 + '@one-ini/wasm@0.1.1': {} '@opentelemetry/api-logs@0.215.0': @@ -24807,35 +25711,11 @@ snapshots: transitivePeerDependencies: - magicast - '@proj-airi/unplugin-fetch@0.2.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': - dependencies: - ofetch: 1.5.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@proj-airi/unplugin-fetch@0.2.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: ofetch: 1.5.1 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@proj-airi/unplugin-live2d-sdk@0.1.7(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)': - dependencies: - ofetch: 1.5.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - yauzl: 3.3.0 - transitivePeerDependencies: - - '@types/node' - - '@vitejs/devtools' - - esbuild - - jiti - - less - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - '@proj-airi/unplugin-live2d-sdk@0.1.7(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)': dependencies: ofetch: 1.5.1 @@ -25190,6 +26070,117 @@ snapshots: '@sapphire/snowflake@3.5.5': {} + '@sec-ant/readable-stream@0.4.1': {} + + '@semantic-release/changelog@6.0.3(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + fs-extra: 11.3.4 + lodash: 4.17.21 + semantic-release: 25.0.9(typescript@5.9.3) + + '@semantic-release/commit-analyzer@13.0.1(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 8.3.1 + conventional-changelog-writer: 8.4.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.4.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0 + lodash-es: 4.18.1 + micromatch: 4.0.8 + semantic-release: 25.0.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@semantic-release/error@3.0.0': {} + + '@semantic-release/error@4.0.0': {} + + '@semantic-release/exec@7.1.0(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 4.0.0 + aggregate-error: 3.1.0 + debug: 4.4.3(supports-color@10.2.2) + execa: 9.6.1 + lodash-es: 4.18.1 + parse-json: 8.3.0 + semantic-release: 25.0.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@semantic-release/git@10.0.1(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + debug: 4.4.3(supports-color@10.2.2) + dir-glob: 3.0.1 + execa: 5.1.1 + lodash: 4.17.21 + micromatch: 4.0.8 + p-reduce: 2.1.0 + semantic-release: 25.0.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@semantic-release/github@12.0.9(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + '@octokit/core': 7.0.7 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.7) + '@octokit/plugin-retry': 8.1.1(@octokit/core@7.0.7) + '@octokit/plugin-throttling': 11.0.5(@octokit/core@7.0.7) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@10.2.2) + dir-glob: 3.0.1 + http-proxy-agent: 9.1.0 + https-proxy-agent: 9.1.0 + issue-parser: 7.0.2 + lodash-es: 4.18.1 + mime: 4.1.0 + p-filter: 4.1.0 + semantic-release: 25.0.9(typescript@5.9.3) + tinyglobby: 0.2.17 + undici: 7.25.0 + url-join: 5.0.0 + transitivePeerDependencies: + - kerberos + - supports-color + + '@semantic-release/npm@13.1.5(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + '@actions/core': 3.0.1 + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + env-ci: 11.2.0 + execa: 9.6.1 + fs-extra: 11.3.4 + lodash-es: 4.18.1 + nerf-dart: 1.0.0 + normalize-url: 9.0.1 + npm: 11.19.0 + rc: 1.2.8 + read-pkg: 10.1.0 + registry-auth-token: 5.1.0 + semantic-release: 25.0.9(typescript@5.9.3) + semver: 7.7.4 + tempy: 3.2.0 + + '@semantic-release/release-notes-generator@14.1.1(semantic-release@25.0.9(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 8.3.1 + conventional-changelog-writer: 8.4.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.4.0 + debug: 4.4.3(supports-color@10.2.2) + import-from-esm: 2.0.0 + lodash-es: 4.18.1 + read-package-up: 11.0.0 + semantic-release: 25.0.9(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + '@shikijs/core@3.23.0': dependencies: '@shikijs/types': 3.23.0 @@ -25288,12 +26279,16 @@ snapshots: dependencies: '@simple-git/args-pathspec': 1.0.3 + '@simple-libs/stream-utils@1.2.0': {} + '@sindresorhus/base62@1.0.0': {} '@sindresorhus/is@4.6.0': {} '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@snazzah/davey-android-arm-eabi@0.1.11': optional: true @@ -25789,6 +26784,8 @@ snapshots: dependencies: undici-types: 7.19.2 + '@types/normalize-package-data@2.4.4': {} + '@types/nprogress@0.2.3': {} '@types/offscreencanvas@2019.7.3': {} @@ -26566,12 +27563,6 @@ snapshots: transitivePeerDependencies: - typescript - '@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': - dependencies: - '@rolldown/pluginutils': 1.0.0-rc.13 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vue: 3.5.32(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.13 @@ -26847,15 +27838,6 @@ snapshots: transitivePeerDependencies: - vue - '@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': - dependencies: - sirv: 3.0.2 - vue: 3.5.32(typescript@5.9.3) - optionalDependencies: - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - transitivePeerDependencies: - - typescript - '@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: sirv: 3.0.2 @@ -27446,6 +28428,18 @@ snapshots: agent-base@7.1.4: {} + agent-base@9.0.0: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + aggregate-error@5.0.0: + dependencies: + clean-stack: 5.3.0 + indent-string: 5.0.0 + ajv-formats@3.0.1(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 @@ -27494,6 +28488,10 @@ snapshots: ansi-regex@6.2.2: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -27605,6 +28603,8 @@ snapshots: args-tokenizer@0.3.0: {} + argv-formatter@1.0.0: {} + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 @@ -27619,6 +28619,8 @@ snapshots: array-differ@4.0.0: {} + array-ify@1.0.0: {} + array-union@1.0.2: dependencies: array-uniq: 1.0.3 @@ -27774,6 +28776,8 @@ snapshots: dependencies: tweetnacl: 0.14.5 + before-after-hook@4.0.0: {} + best-effort-json-parser@1.4.0: {} better-auth@1.4.22(@prisma/client@5.22.0)(better-sqlite3@12.5.0)(drizzle-kit@0.31.10)(drizzle-orm@0.41.0(@electric-sql/pglite@0.4.4)(@opentelemetry/api@1.9.1)(@prisma/client@5.22.0)(@types/pg@8.20.0)(better-sqlite3@12.5.0)(kysely@0.29.4)(pg@8.20.0)(postgres@3.4.9))(pg@8.20.0)(react@19.2.3)(vitest@4.1.4)(vue@3.5.32(typescript@5.9.3)): @@ -27918,6 +28922,8 @@ snapshots: boolean@3.2.0: {} + bottleneck@2.19.5: {} + boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -28098,6 +29104,8 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 + callsites@3.1.0: {} + camelcase@4.1.0: {} camelcase@8.0.0: {} @@ -28127,6 +29135,12 @@ snapshots: dependencies: chalk: 4.1.2 + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -28136,6 +29150,8 @@ snapshots: change-case@5.4.4: {} + char-regex@1.0.2: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -28194,6 +29210,12 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + clean-stack@2.2.0: {} + + clean-stack@5.3.0: + dependencies: + escape-string-regexp: 5.0.0 + cli-boxes@3.0.0: {} cli-cursor@3.1.0: @@ -28204,10 +29226,25 @@ snapshots: dependencies: restore-cursor: 5.1.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.2 + cli-spinners@2.9.2: {} cli-spinners@3.4.0: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 @@ -28230,12 +29267,24 @@ snapshots: strip-ansi: 4.0.0 yargs-parser: 7.0.0 + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 @@ -28246,10 +29295,16 @@ snapshots: clustr@1.0.2: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} color-string@1.9.1: @@ -28330,6 +29385,11 @@ snapshots: commondir@1.0.1: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + compare-version@0.1.2: {} compressible@2.0.18: @@ -28392,6 +29452,29 @@ snapshots: content-type@1.0.5: {} + content-type@2.0.0: {} + + conventional-changelog-angular@8.3.1: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-writer@8.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + conventional-commits-filter: 5.0.0 + handlebars: 4.7.9 + meow: 13.2.0 + semver: 7.7.4 + + conventional-commits-filter@5.0.0: {} + + conventional-commits-parser@6.4.0: + dependencies: + '@simple-libs/stream-utils': 1.2.0 + meow: 13.2.0 + + convert-hrtime@5.0.0: {} + convert-source-map@2.0.0: {} cookie-es@1.2.3: {} @@ -28425,6 +29508,15 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cosmiconfig@9.0.2(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + crc@3.8.0: dependencies: buffer: 5.7.1 @@ -28451,6 +29543,10 @@ snapshots: crypto-random-string@2.0.0: {} + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + css-line-break@2.1.0: dependencies: utrie: 1.0.2 @@ -28768,6 +29864,10 @@ snapshots: minimatch: 3.1.5 p-limit: 3.1.0 + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + direction@2.0.1: {} discontinuous-range@1.0.0: {} @@ -28856,6 +29956,10 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + dot-prop@9.0.0: dependencies: type-fest: 4.41.0 @@ -28920,6 +30024,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + duplexer@0.1.2: {} earcut@2.2.4: {} @@ -29010,7 +30118,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-vite@5.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + electron-vite@5.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) @@ -29018,7 +30126,7 @@ snapshots: esbuild: 0.25.12 magic-string: 0.30.21 picocolors: 1.1.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -29080,6 +30188,8 @@ snapshots: emoji-regex@9.2.2: {} + emojilib@2.4.0: {} + empathic@2.0.0: {} encodeurl@1.0.2: {} @@ -29142,6 +30252,11 @@ snapshots: entities@8.0.0: {} + env-ci@11.2.0: + dependencies: + execa: 8.0.1 + java-properties: 1.0.2 + env-paths@2.2.1: {} environment@1.1.0: {} @@ -29685,6 +30800,33 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exif-parser@0.1.12: {} expand-template@2.0.3: {} @@ -29860,6 +31002,14 @@ snapshots: fflate@0.8.3: {} + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -29953,6 +31103,11 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-versions@6.0.0: + dependencies: + semver-regex: 4.0.5 + super-regex: 1.1.0 + firefox-profile@4.7.0: dependencies: adm-zip: 0.5.16 @@ -30107,6 +31262,8 @@ snapshots: function-bind@1.1.2: {} + function-timeout@1.0.2: {} + functional-red-black-tree@1.0.1: {} fuse.js@7.1.0: {} @@ -30177,6 +31334,13 @@ snapshots: get-stream@6.0.1: {} + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -30209,6 +31373,15 @@ snapshots: nypm: 0.6.5 pathe: 2.0.3 + git-log-parser@1.2.1: + dependencies: + argv-formatter: 1.0.0 + spawn-error-forwarder: 1.0.0 + split2: 1.0.0 + stream-combiner2: 1.1.1 + through2: 2.0.5 + traverse: 0.6.8 + git-up@8.1.1: dependencies: is-ssh: 1.4.1 @@ -30398,6 +31571,15 @@ snapshots: rou3: 0.9.1 srvx: 0.11.22 + handlebars@4.7.9: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + har-schema@2.0.0: {} har-validator@5.1.5: @@ -30405,6 +31587,8 @@ snapshots: ajv: 6.14.0 har-schema: 2.0.0 + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -30577,6 +31761,8 @@ snapshots: gray-matter: 4.0.3 unplugin: 3.0.0 + highlight.js@10.7.3: {} + histoire@1.0.0-beta.1(@noble/hashes@2.0.1)(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@akryum/tinypool': 0.3.1 @@ -30636,6 +31822,8 @@ snapshots: hono@4.12.2: {} + hook-std@4.0.0: {} + hookable@5.5.3: {} hookable@6.1.1: {} @@ -30644,6 +31832,14 @@ snapshots: dependencies: lru-cache: 6.0.0 + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@9.0.3: + dependencies: + lru-cache: 11.3.5 + html-encoding-sniffer@6.0.0(@noble/hashes@2.0.1): dependencies: '@exodus/bytes': 1.15.0(@noble/hashes@2.0.1) @@ -30696,6 +31892,15 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@9.1.0: + dependencies: + agent-base: 9.0.0 + debug: 4.4.3(supports-color@10.2.2) + proxy-agent-negotiate: 1.1.0 + transitivePeerDependencies: + - kerberos + - supports-color + http-signature@1.2.0: dependencies: assert-plus: 1.0.0 @@ -30714,8 +31919,21 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@9.1.0: + dependencies: + agent-base: 9.0.0 + debug: 4.4.3(supports-color@10.2.2) + proxy-agent-negotiate: 1.1.0 + transitivePeerDependencies: + - kerberos + - supports-color + human-signals@2.1.0: {} + human-signals@5.0.0: {} + + human-signals@8.0.1: {} + iconv-corefoundation@1.1.7: dependencies: cli-truncate: 2.1.0 @@ -30760,6 +31978,11 @@ snapshots: immediate@3.0.6: {} + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + import-from-esm@1.3.4: dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -30767,6 +31990,13 @@ snapshots: transitivePeerDependencies: - supports-color + import-from-esm@2.0.0: + dependencies: + debug: 4.4.3(supports-color@10.2.2) + import-meta-resolve: 4.2.0 + transitivePeerDependencies: + - supports-color + import-in-the-middle@3.0.0: dependencies: acorn: 8.16.0 @@ -30780,8 +32010,12 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + indent-string@5.0.0: {} + index-to-position@1.2.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -30930,6 +32164,8 @@ snapshots: is-obj@1.0.1: {} + is-obj@2.0.0: {} + is-path-inside@4.0.0: {} is-plain-obj@4.1.0: {} @@ -30956,10 +32192,16 @@ snapshots: is-stream@2.0.1: {} + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + is-typedarray@1.0.0: {} is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} + is-what@4.1.16: {} is-what@5.5.0: {} @@ -30997,6 +32239,14 @@ snapshots: isstream@0.1.2: {} + issue-parser@7.0.2: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + istanbul-lib-coverage@3.2.2: {} istanbul-lib-report@3.0.1: @@ -31026,6 +32276,8 @@ snapshots: filelist: 1.0.4 picocolors: 1.1.1 + java-properties@1.0.2: {} + jiti@2.7.0: {} jose@6.2.2: {} @@ -31131,6 +32383,10 @@ snapshots: json-buffer@3.0.1: {} + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} json-schema-traverse@0.4.1: {} @@ -31145,6 +32401,8 @@ snapshots: json-stringify-safe@5.0.1: {} + json-with-bigint@3.5.10: {} + json5@2.2.3: {} jsonc-eslint-parser@2.4.2: @@ -31409,6 +32667,13 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.2 + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + local-pkg@1.1.2: dependencies: mlly: 1.8.0 @@ -31432,8 +32697,12 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.18.1: {} + lodash.camelcase@4.3.0: {} + lodash.capitalize@4.2.1: {} + lodash.debounce@4.0.8: {} lodash.defaults@4.2.0: {} @@ -31470,6 +32739,8 @@ snapshots: lodash.truncate@4.4.2: {} + lodash.uniqby@4.7.0: {} + lodash@4.17.21: {} log-symbols@4.1.0: @@ -31549,6 +32820,12 @@ snapshots: for-each-property: 0.0.4 inspect-property: 0.0.6 + make-asynchronous@1.1.0: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -31607,6 +32884,19 @@ snapshots: markdown-table@3.0.4: {} + marked-terminal@7.3.0(marked@15.0.12): + dependencies: + ansi-escapes: 7.2.0 + ansi-regex: 6.2.2 + chalk: 5.6.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 15.0.12 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + + marked@15.0.12: {} + marky@1.3.0: {} matcher@3.0.0: @@ -31765,6 +33055,8 @@ snapshots: '@types/dom-mediacapture-transform': 0.1.11 '@types/dom-webcodecs': 0.1.13 + meow@13.2.0: {} + meow@14.1.0: {} merge-descriptors@1.0.3: {} @@ -32012,8 +33304,12 @@ snapshots: mime@3.0.0: {} + mime@4.1.0: {} + mimic-fn@2.1.0: {} + mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} mimic-response@1.0.1: {} @@ -32342,6 +33638,10 @@ snapshots: negotiator@1.0.0: {} + neo-async@2.6.2: {} + + nerf-dart@1.0.0: {} + neverthrow@8.2.0: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.60.1 @@ -32369,6 +33669,13 @@ snapshots: node-domexception@1.0.0: {} + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + node-fetch-native@1.6.7: {} node-fetch@2.7.0(encoding@0.1.13): @@ -32442,14 +33749,39 @@ snapshots: dependencies: abbrev: 3.0.1 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.4 + validate-npm-package-license: 3.0.4 + + normalize-package-data@8.0.0: + dependencies: + hosted-git-info: 9.0.3 + semver: 7.7.4 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} normalize-url@6.1.0: {} + normalize-url@9.0.1: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + npm@11.19.0: {} + nprogress@0.2.0: {} nth-check@2.1.1: @@ -32514,6 +33846,10 @@ snapshots: dependencies: mimic-fn: 2.1.0 + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -32751,6 +34087,16 @@ snapshots: p-cancelable@2.1.1: {} + p-each-series@3.0.0: {} + + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + + p-filter@4.1.0: + dependencies: + p-map: 7.0.4 + p-limit@1.3.0: dependencies: p-try: 1.0.0 @@ -32781,6 +34127,12 @@ snapshots: p-map@7.0.4: {} + p-reduce@2.1.0: {} + + p-reduce@3.0.0: {} + + p-timeout@6.1.4: {} + p-try@1.0.0: {} p-try@2.2.0: {} @@ -32800,12 +34152,28 @@ snapshots: pako@2.1.0: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-gitignore@2.0.0: {} parse-imports-exports@0.2.4: dependencies: parse-statements: 1.0.11 + parse-json@4.0.0: + dependencies: + error-ex: 1.3.4 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + parse-json@7.1.1: dependencies: '@babel/code-frame': 7.29.0 @@ -32814,6 +34182,14 @@ snapshots: lines-and-columns: 2.0.4 type-fest: 3.13.1 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + parse-node-version@1.0.1: {} parse-path@7.1.0: @@ -32827,6 +34203,14 @@ snapshots: '@types/parse-path': 7.1.0 parse-path: 7.1.0 + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -32849,6 +34233,8 @@ snapshots: path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: @@ -32865,6 +34251,8 @@ snapshots: path-to-regexp@8.3.0: {} + path-type@4.0.0: {} + path-type@6.0.0: {} pathe@1.1.2: {} @@ -32928,6 +34316,8 @@ snapshots: pify@2.3.0: {} + pify@3.0.0: {} + pify@4.0.1: optional: true @@ -33035,6 +34425,11 @@ snapshots: pkce-challenge@5.0.1: {} + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -33176,6 +34571,10 @@ snapshots: pretty-bytes@6.1.1: {} + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + prism-media@1.3.5(opusscript@0.1.1): optionalDependencies: opusscript: 0.1.1 @@ -33401,6 +34800,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent-negotiate@1.1.0: {} + prr@1.0.1: optional: true @@ -33514,6 +34915,34 @@ snapshots: transitivePeerDependencies: - supports-color + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-package-up@12.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 10.1.0 + type-fest: 5.8.0 + + read-pkg@10.1.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 8.0.0 + parse-json: 8.3.0 + type-fest: 5.8.0 + unicorn-magic: 0.4.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + readable-stream@1.0.34: dependencies: core-util-is: 1.0.3 @@ -33761,6 +35190,10 @@ snapshots: resolve-alpn@1.2.1: {} + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} resolve.exports@2.0.3: {} @@ -34017,8 +35450,45 @@ snapshots: extend-shallow: 2.0.1 kind-of: 6.0.3 + semantic-release@25.0.9(typescript@5.9.3): + dependencies: + '@semantic-release/commit-analyzer': 13.0.1(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 12.0.9(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/npm': 13.1.5(semantic-release@25.0.9(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 14.1.1(semantic-release@25.0.9(typescript@5.9.3)) + aggregate-error: 5.0.0 + cosmiconfig: 9.0.2(typescript@5.9.3) + debug: 4.4.3(supports-color@10.2.2) + env-ci: 11.2.0 + execa: 9.6.1 + figures: 6.1.0 + find-versions: 6.0.0 + get-stream: 6.0.1 + git-log-parser: 1.2.1 + hook-std: 4.0.0 + hosted-git-info: 9.0.3 + import-from-esm: 2.0.0 + lodash-es: 4.18.1 + marked: 15.0.12 + marked-terminal: 7.3.0(marked@15.0.12) + micromatch: 4.0.8 + p-each-series: 3.0.0 + p-reduce: 3.0.0 + read-package-up: 12.0.0 + resolve-from: 5.0.0 + semver: 7.7.4 + signale: 1.4.0 + yargs: 18.1.0 + transitivePeerDependencies: + - kerberos + - supports-color + - typescript + semver-compare@1.0.0: {} + semver-regex@4.0.5: {} + semver@5.7.2: {} semver@6.3.1: {} @@ -34180,6 +35650,12 @@ snapshots: signal-exit@4.1.0: {} + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + simple-concat@1.0.1: {} simple-get@4.0.1: @@ -34216,6 +35692,10 @@ snapshots: sisteransi@1.0.5: {} + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + slash@5.1.0: {} slice-ansi@3.0.0: @@ -34326,13 +35806,25 @@ snapshots: space-separated-tokens@2.0.2: {} + spawn-error-forwarder@1.0.0: {} + spawn-sync@1.0.15: dependencies: concat-stream: 1.6.2 os-shim: 0.1.3 + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + spdx-exceptions@2.5.0: {} + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 @@ -34346,6 +35838,10 @@ snapshots: split-skip@0.0.2: {} + split2@1.0.0: + dependencies: + through2: 2.0.5 + split2@4.2.0: {} split@1.0.1: @@ -34426,6 +35922,11 @@ snapshots: store2@2.14.4: {} + stream-combiner2@1.1.1: + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.8 + streamx@2.28.0: dependencies: events-universal: 1.0.1 @@ -34453,6 +35954,11 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 + string-width@8.2.2: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + string_decoder@0.10.31: {} string_decoder@1.1.1: @@ -34493,12 +35999,18 @@ snapshots: strip-bom-string@1.0.0: {} + strip-bom@3.0.0: {} + strip-bom@5.0.0: {} strip-comments@2.0.1: {} strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + strip-indent@4.1.1: {} strip-json-comments@2.0.1: {} @@ -34555,16 +36067,31 @@ snapshots: transitivePeerDependencies: - supports-color + super-regex@1.1.0: + dependencies: + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 + superjson@2.2.6: dependencies: copy-anything: 4.0.5 supports-color@10.2.2: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} svix@1.90.0: @@ -34603,6 +36130,8 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + tagged-tag@1.0.0: {} + tapable@2.3.0: {} tar-fs@2.1.4: @@ -34686,6 +36215,8 @@ snapshots: temp-dir@2.0.0: {} + temp-dir@3.0.0: {} + temp-file@3.4.0: dependencies: async-exit-hook: 2.0.1 @@ -34703,6 +36234,13 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 + tempy@3.2.0: + dependencies: + is-stream: 3.0.0 + temp-dir: 3.0.0 + type-fest: 2.19.0 + unique-string: 3.0.0 + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 @@ -34767,12 +36305,21 @@ snapshots: readable-stream: 1.0.34 xtend: 4.0.2 + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + through2@4.0.2: dependencies: readable-stream: 3.6.2 through@2.3.8: {} + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + timm@1.7.1: {} tiny-async-pool@1.3.0: @@ -34847,6 +36394,8 @@ snapshots: dependencies: punycode: 2.3.1 + traverse@0.6.8: {} + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -34928,6 +36477,8 @@ snapshots: dependencies: safe-buffer: '@nolyfill/safe-buffer@1.0.44' + tunnel@0.0.6: {} + turbo@2.9.6: optionalDependencies: '@turbo/darwin-64': 2.9.6 @@ -34947,10 +36498,18 @@ snapshots: type-fest@0.16.0: {} + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + type-fest@3.13.1: {} type-fest@4.41.0: {} + type-fest@5.8.0: + dependencies: + tagged-tag: 1.0.0 + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -35005,6 +36564,9 @@ snapshots: ufo@1.6.3: {} + uglify-js@3.19.3: + optional: true + uhyphen@0.2.0: {} uint4@0.1.2: {} @@ -35054,6 +36616,8 @@ snapshots: unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-emoji-modifier-base@1.0.0: {} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 @@ -35063,8 +36627,12 @@ snapshots: unicode-property-aliases-ecmascript@2.2.0: {} + unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} + unicorn-magic@0.4.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -35104,6 +36672,10 @@ snapshots: dependencies: crypto-random-string: 2.0.0 + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + unist-builder@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -35147,6 +36719,8 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + universal-user-agent@7.0.3: {} + universalify@0.1.2: {} universalify@2.0.1: {} @@ -35156,6 +36730,11 @@ snapshots: '@unocss/preset-mini': 66.6.8 unocss: 66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + unocss-preset-scrollbar@4.0.0(unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))): + dependencies: + '@unocss/preset-mini': 66.6.8 + unocss: 66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + unocss@66.6.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@unocss/cli': 66.6.8 @@ -35222,14 +36801,6 @@ snapshots: unplugin: 2.3.11 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - optionalDependencies: - esbuild: 0.27.2 - rolldown: 1.0.0-rc.16 - rollup: 4.60.1 - unplugin: 2.3.11 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: esbuild: 0.27.2 @@ -35251,19 +36822,6 @@ snapshots: transitivePeerDependencies: - supports-color - unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - ci-info: 4.4.0 - git-url-parse: 16.1.0 - simple-git: 3.36.0 - unplugin: 2.3.11 - optionalDependencies: - esbuild: 0.27.2 - rollup: 4.60.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - transitivePeerDependencies: - - supports-color - unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ci-info: 4.4.0 @@ -35357,17 +36915,6 @@ snapshots: rollup: 2.80.0 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - unplugin: 3.0.0 - yaml: 2.8.3 - optionalDependencies: - esbuild: 0.27.2 - rolldown: 1.0.0-rc.16 - rollup: 4.60.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.1) @@ -35456,6 +37003,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@5.0.0: {} + url@0.11.4: dependencies: punycode: 1.4.1 @@ -35495,6 +37044,11 @@ snapshots: optionalDependencies: typescript: 5.9.3 + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} vary@1.1.2: {} @@ -35606,22 +37160,12 @@ snapshots: - rollup - supports-color - vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - birpc: 2.9.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: birpc: 2.9.0 vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-hot-client: 2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - vite-hot-client@2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-hot-client@2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) @@ -35667,21 +37211,6 @@ snapshots: - tsx - yaml - vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - ansis: 4.2.0 - debug: 4.4.3(supports-color@10.2.2) - error-stack-parser-es: 1.0.5 - ohash: 2.0.11 - open: 10.2.0 - perfect-debounce: 2.1.0 - sirv: 3.0.2 - unplugin-utils: 0.3.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - transitivePeerDependencies: - - supports-color - vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ansis: 4.2.0 @@ -35713,13 +37242,6 @@ snapshots: - typescript - ws - vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - debug: 4.4.3(supports-color@10.2.2) - supports-color: 10.2.2 - undici: 8.1.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -35738,20 +37260,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): - dependencies: - '@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3)) - '@vue/devtools-kit': 8.1.1 - '@vue/devtools-shared': 8.1.1 - sirv: 3.0.2 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-inspect: 11.3.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - vite-plugin-vue-inspector: 5.3.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - transitivePeerDependencies: - - '@nuxt/kit' - - supports-color - - vue - vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): dependencies: '@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3)) @@ -35766,21 +37274,6 @@ snapshots: - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.29.0) - '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0) - '@vue/compiler-dom': 3.5.32 - kolorist: 1.8.0 - magic-string: 0.30.21 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - transitivePeerDependencies: - - supports-color - vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 @@ -35796,16 +37289,6 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)): - dependencies: - debug: 4.4.3(supports-color@10.2.2) - fast-glob: 3.3.3 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vue: 3.5.32(typescript@5.9.3) - vue-router: 5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) - transitivePeerDependencies: - - supports-color - vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@pinia/colada@1.2.1(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -36090,54 +37573,6 @@ snapshots: - vue-tsc - webpack - vue-macros@3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)): - dependencies: - '@vue-macros/better-define': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/boolean-prop': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/chain-call': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/config': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-emit': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-models': 3.1.2(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-prop': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-props': 3.1.2(@vue-macros/reactivity-transform@3.1.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-props-refs': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-slots': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/define-stylex': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/devtools': 3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vue-macros/export-expose': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/export-props': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/export-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/hoist-static': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/jsx-directive': 3.1.2(typescript@5.9.3) - '@vue-macros/named-template': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/reactivity-transform': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/script-lang': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/setup-block': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/setup-component': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/setup-sfc': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/short-bind': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/short-emits': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/short-vmodel': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/volar': 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) - unplugin: 2.3.11 - unplugin-combine: 2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - unplugin-vue-define-options: 3.1.2(vue@3.5.32(typescript@5.9.3)) - vue: 3.5.32(typescript@5.9.3) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@rspack/core' - - '@vueuse/core' - - esbuild - - rolldown - - rollup - - typescript - - vite - - vue-tsc - - webpack - vue-macros@3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.16)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.7.0)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)): dependencies: '@vue-macros/better-define': 3.1.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(vue@3.5.32(typescript@5.9.3)) @@ -36295,8 +37730,7 @@ snapshots: web-vitals@4.2.4: {} - web-worker@1.5.0: - optional: true + web-worker@1.5.0: {} webidl-conversions@3.0.1: {} @@ -36387,6 +37821,8 @@ snapshots: word-wrap@1.2.5: {} + wordwrap@1.0.0: {} + wordwrapjs@3.0.0: dependencies: reduce-flatten: 1.0.1 @@ -36682,12 +38118,26 @@ snapshots: yaml@2.8.3: {} + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs-parser@7.0.0: dependencies: camelcase: 4.1.0 + yargs@16.2.2: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -36698,6 +38148,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.1.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 8.2.2 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 13836400d..3051c9c8e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -115,7 +115,7 @@ catalog: '@mediapipe/tasks-vision': ^0.10.34 '@modelcontextprotocol/sdk': ^1.29.0 '@moeru/eslint-config': 0.1.0-beta.19 - '@moeru/eventa': 1.0.0-beta.13 + '@moeru/eventa': 1.0.0-beta.15 '@moeru/std': 0.1.0-beta.17 '@moeru/three-mmd': 0.1.0-beta.7 '@moeru/three-mmd-physics-ammo': 0.1.0-beta.7 diff --git a/vitest.config.ts b/vitest.config.ts index 0547c9922..112cd5a37 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -19,6 +19,7 @@ export default defineConfig({ 'packages/server-runtime', 'packages/server-sdk', 'packages/stage-shared', + 'packages/vitest-plugin-fakemic', ], }, })