arcane-os 0.95.0 → 0.97.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +1 -1
- package/browser-runtime/ai/core-model-assets.mjs +79 -0
- package/docs/reference/README.md +14 -0
- package/docs/reference/ai/browser-speech.md +61 -10
- package/docs/reference/core-client.md +35 -0
- package/docs/reference/core-native-packaging.md +51 -9
- package/docs/reference/inventory/package-api.json +239 -15
- package/docs/reference/inventory/runtime-modules.json +39 -13
- package/docs/reference/model-assets.md +219 -23
- package/docs/reference/native-speech.md +128 -4
- package/docs/reference/runtime-modules.md +157 -11
- package/docs/reference/sdk-api.md +475 -18
- package/package.json +3 -3
- package/src/core/host.mjs +22 -17
- package/src/core/services/local-ai.mjs +46 -12
- package/src/core/services/model-assets.mjs +885 -96
- package/src/core/services/speech.mjs +2 -2
- package/src/local-ai/nemo-models.mjs +160 -0
- package/src/local-ai/nemotron/index.mjs +63 -7
- package/src/native/macos-provider.mjs +14 -7
- package/src/native/portable-assembly.mjs +180 -0
- package/src/native/portable-provider.mjs +17 -161
- package/src/native/publish-output.mjs +101 -0
- package/src/native/windows-provider.mjs +12 -6
|
@@ -1,17 +1,113 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"sdkVersion": "0.
|
|
3
|
+
"sdkVersion": "0.96.0",
|
|
4
4
|
"environment": {
|
|
5
5
|
"runtime": "Node.js for Node entrypoints; browser for browser-only entrypoints",
|
|
6
6
|
"minimumVersion": "22.23.2 for Node entrypoints",
|
|
7
7
|
"moduleSystem": "ESM"
|
|
8
8
|
},
|
|
9
|
-
"memberCount":
|
|
9
|
+
"memberCount": 328,
|
|
10
10
|
"runtimeSubpathPatterns": {
|
|
11
11
|
"arcane-os/modules/*": "./runtime/arcane/modules/*",
|
|
12
12
|
"arcane-os/entities/*": "./runtime/arcane/entities/*"
|
|
13
13
|
},
|
|
14
14
|
"members": [
|
|
15
|
+
{
|
|
16
|
+
"id": "local-ai-nemotron:NEMO_SPEECH_MODELS",
|
|
17
|
+
"name": "NEMO_SPEECH_MODELS",
|
|
18
|
+
"displayName": "NEMO_SPEECH_MODELS",
|
|
19
|
+
"kind": "constant",
|
|
20
|
+
"signature": "NEMO_SPEECH_MODELS",
|
|
21
|
+
"entrypoints": [
|
|
22
|
+
"arcane-os/local-ai/nemotron"
|
|
23
|
+
],
|
|
24
|
+
"primaryImport": "arcane-os/local-ai/nemotron",
|
|
25
|
+
"group": "Core native speech",
|
|
26
|
+
"summary": "Describes the selected complete Nemotron and Magpie upstream model companions.",
|
|
27
|
+
"availability": "Node; importing this catalog performs no I/O",
|
|
28
|
+
"protocol": "Selected NVIDIA NeMo-Speech.cpp 0.2.0 model catalog",
|
|
29
|
+
"normalization": "stt selects ASR and diarization; tts selects Magpie, NanoCodec and ten tokenizer/configuration members. Each record exposes modelId, providerId, name, members, resourcePaths and optional archives. No acquisition, runtime install, device choice or inference occurs at import."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "local-ai-nemotron:prepareNemotronModels",
|
|
33
|
+
"name": "prepareNemotronModels",
|
|
34
|
+
"displayName": "prepareNemotronModels()",
|
|
35
|
+
"kind": "function",
|
|
36
|
+
"signature": "prepareNemotronModels({modelAssets,workingDirectory,directories,id,signal,onProgress,refresh=false}={})",
|
|
37
|
+
"entrypoints": [
|
|
38
|
+
"arcane-os/local-ai/nemotron"
|
|
39
|
+
],
|
|
40
|
+
"primaryImport": "arcane-os/local-ai/nemotron",
|
|
41
|
+
"group": "Core native speech",
|
|
42
|
+
"summary": "Explicitly prepares the complete ASR and diarization catalog selection.",
|
|
43
|
+
"availability": "Node with the existing model-assets service",
|
|
44
|
+
"protocol": "Native model-assets discovery and persistent preparation",
|
|
45
|
+
"normalization": "Resolves assetProjectionId, directory, members, resourcePaths and idempotent asynchronous release(). An omitted id is generated. Optional directories are searched first unless refresh:true; the first complete matching catalog selection is borrowed, otherwise shared prepare acquires the complete set beneath workingDirectory/model-assets. Ordered asynchronous onProgress forwards native acquisition resume/restart/wait/activity and terminal records. Direct installed-directory reuse retains phase/completed/total/unit:'files' records for reuse then ready. The shared owner retains completed members and closed partials after interruption/cancellation; explicit retry follows its conditional HTTP continuation and single-member restart rules, with same-selection cross-process coordination. Caller cancellation is independent while another interested caller remains; final cancellation joins I/O and retains resumable data. Engines retain actual use; callers release preparation ownership after retention. Borrowed originals and complete acquisitions remain stored. No runtime install, device choice, microphone or inference."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "local-ai-nemotron:prepareMagpieModels",
|
|
49
|
+
"name": "prepareMagpieModels",
|
|
50
|
+
"displayName": "prepareMagpieModels()",
|
|
51
|
+
"kind": "function",
|
|
52
|
+
"signature": "prepareMagpieModels({modelAssets,workingDirectory,directories,id,signal,onProgress,refresh=false}={})",
|
|
53
|
+
"entrypoints": [
|
|
54
|
+
"arcane-os/local-ai/nemotron"
|
|
55
|
+
],
|
|
56
|
+
"primaryImport": "arcane-os/local-ai/nemotron",
|
|
57
|
+
"group": "Core native speech",
|
|
58
|
+
"summary": "Explicitly prepares Magpie, NanoCodec and all matching tokenizer companions.",
|
|
59
|
+
"availability": "Node with the existing model-assets service",
|
|
60
|
+
"protocol": "Native model-assets discovery and persistent preparation",
|
|
61
|
+
"normalization": "Same discovery, preparation, cancellation, ordered progress and release contract as prepareNemotronModels, using NEMO_SPEECH_MODELS.tts. Resolves assetProjectionId, directory, members, resourcePaths and release; resourcePaths contains model, codec and tokenizerConfig. The shared TAR owner extracts ten selected tokenizer/configuration members from upstream ranges while preserving complete files. Retry preserves completed companions and replays required TAR segment framing; ordinary model members use the shared conditional HTTP resume rules. Native acquisition reports its semantic states while direct installed-directory reuse keeps the existing phase/file-count records. Voice, language and device remain caller-owned; preparation performs no synthesis."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "core-model-assets:discoverCoreModelAssets",
|
|
65
|
+
"name": "discoverCoreModelAssets",
|
|
66
|
+
"displayName": "discoverCoreModelAssets()",
|
|
67
|
+
"kind": "function",
|
|
68
|
+
"signature": "discoverCoreModelAssets({client=getInstalledCoreClient(),directories,catalog,recursive,signal}={})",
|
|
69
|
+
"entrypoints": [
|
|
70
|
+
"arcane-os/ai/core-model-assets"
|
|
71
|
+
],
|
|
72
|
+
"primaryImport": "arcane-os/ai/core-model-assets",
|
|
73
|
+
"group": "Core model assets",
|
|
74
|
+
"summary": "Discovers installed native model sets and companions in explicit directories.",
|
|
75
|
+
"availability": "Browser with an available model-assets Core service",
|
|
76
|
+
"protocol": "arcane/1 modelAssets.discover",
|
|
77
|
+
"normalization": "Resolves the native directories/models result unchanged, including ordered GGUF shards, missingMembers, completeness and catalog/acquisition source records. Directories and catalogs remain application-owned; filesystem availability does not establish model selection or readiness. No download, copy, move or engine load. Missing Core reports ARCANE_MODEL_ASSETS_CORE_UNAVAILABLE; actual operation and cancellation failures remain observable."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "core-model-assets:openExistingCoreModelAssets",
|
|
81
|
+
"name": "openExistingCoreModelAssets",
|
|
82
|
+
"displayName": "openExistingCoreModelAssets()",
|
|
83
|
+
"kind": "function",
|
|
84
|
+
"signature": "openExistingCoreModelAssets({client=getInstalledCoreClient(),directory,members,signal}={})",
|
|
85
|
+
"entrypoints": [
|
|
86
|
+
"arcane-os/ai/core-model-assets"
|
|
87
|
+
],
|
|
88
|
+
"primaryImport": "arcane-os/ai/core-model-assets",
|
|
89
|
+
"group": "Core model assets",
|
|
90
|
+
"summary": "Opens a complete borrowed projection without copying installed model originals.",
|
|
91
|
+
"availability": "Browser with an available model-assets Core service",
|
|
92
|
+
"protocol": "arcane/1 modelAssets.openExisting and modelAssets.release",
|
|
93
|
+
"normalization": "Generates its projection id and resolves id, directory, members and idempotent asynchronous release(). Native engines retain their own use; borrowed originals remain intact. Missing members report MODEL_ASSET_MEMBERS_MISSING with the complete list. Cancellation joins uncancelled release before rejecting; actual Core and cleanup failures remain observable."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "core-model-assets:downloadCoreModelAssets",
|
|
97
|
+
"name": "downloadCoreModelAssets",
|
|
98
|
+
"displayName": "downloadCoreModelAssets()",
|
|
99
|
+
"kind": "function",
|
|
100
|
+
"signature": "downloadCoreModelAssets({client=getInstalledCoreClient(),workingDirectory,members,archives,refresh=false,signal,onProgress}={})",
|
|
101
|
+
"entrypoints": [
|
|
102
|
+
"arcane-os/ai/core-model-assets"
|
|
103
|
+
],
|
|
104
|
+
"primaryImport": "arcane-os/ai/core-model-assets",
|
|
105
|
+
"group": "Core model assets",
|
|
106
|
+
"summary": "Acquires a complete native model selection with correlated progress and joined cancellation.",
|
|
107
|
+
"availability": "Browser with an available model-assets Core service",
|
|
108
|
+
"protocol": "arcane/1 modelAssets.prepare/cancelPrepare/release and modelAssets.progress",
|
|
109
|
+
"normalization": "Generates its projection id and resolves id, directory, members and idempotent asynchronous release(). The native owner acquires complete ordinary and TAR-selected companions; full request-correlated semantic progress awaits asynchronous callbacks in order, including actual wait/resume/restart/heartbeat/stall and terminal states. Cancellation or callback failure joins native cancelPrepare cleanup and callback delivery before settlement; actual cleanup failures remain observable. On Core preparation failure, already queued terminal progress is delivered before internal cleanup cancellation and helper rejection. Explicit caller cancellation preserves the no-late-callback boundary. Release relinquishes preparation ownership while completed downloads remain stored; interrupted/cancelled transfers retain completed members and closed partials for explicit retry under the native owner's conditional HTTP continuation/member-restart rules. Same-selection cross-process acquisition is owned by the native service, not a separate browser downloader. No implicit model, runtime or device selection."
|
|
110
|
+
},
|
|
15
111
|
{
|
|
16
112
|
"id": "core-document-acquisition:createDocumentAcquisitionService",
|
|
17
113
|
"name": "createDocumentAcquisitionService",
|
|
@@ -250,6 +346,134 @@
|
|
|
250
346
|
"protocol": "Native speech voice selection",
|
|
251
347
|
"normalization": "Complete ordered voice array exported by the frontend; af_heart is the omitted voice default. An unsupported explicit voice reports its actual incompatibility without substitution."
|
|
252
348
|
},
|
|
349
|
+
{
|
|
350
|
+
"id": "local-ai-nemotron:createNemotronRuntime",
|
|
351
|
+
"name": "createNemotronRuntime",
|
|
352
|
+
"displayName": "createNemotronRuntime()",
|
|
353
|
+
"kind": "function",
|
|
354
|
+
"signature": "createNemotronRuntime({runtime,prepare,modelId='nemotron-3.5-asr-streaming-0.6b',modelPath,diarizationModelPath,modelAssets,assetProjectionId,resourcePaths,gpu,onEvent}={})",
|
|
355
|
+
"entrypoints": [
|
|
356
|
+
"arcane-os/local-ai/nemotron"
|
|
357
|
+
],
|
|
358
|
+
"primaryImport": "arcane-os/local-ai/nemotron",
|
|
359
|
+
"group": "Core native speech",
|
|
360
|
+
"summary": "Retains one native recognizer and optional diarizer across explicit utterance endpoints.",
|
|
361
|
+
"availability": "Node with a matching first-party helper, selected NeMo ASR runtime and models; Windows/Linux/macOS source, Android host adaptation",
|
|
362
|
+
"protocol": "Native ASR C ABI through one retained helper and replaying nemotron.state",
|
|
363
|
+
"normalization": "Returns current/subscribe/load/unload/transcribe/openStream/close. Exact ordered Float32 or f32le input uses the actual declared sample rate; complete snapshots retain alternatives, words, timestamps and speaker scope. forceEndpoint preserves the native stream; finish drains terminally. Callback joins reject NEMOTRON_CALLBACK_WAIT. Cancellation joins cleanup and exposes resetRequired when an in-flight native call requires helper termination; explicit load is required afterward. No microphone, semantic completion or fallback. Optional modelAssets and completed assetProjectionId select exact resourcePaths.model and optional resourcePaths.diarization members. Load retains that projection before yielding through actual helper cleanup; callers may release preparation ownership after loading begins. An active selection must be unloaded before replacement; direct paths remain supported."
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"id": "local-ai-nemotron:default",
|
|
367
|
+
"name": "default",
|
|
368
|
+
"displayName": "createNemotronRuntime default export",
|
|
369
|
+
"kind": "function",
|
|
370
|
+
"signature": "default as createNemotronRuntime",
|
|
371
|
+
"entrypoints": [
|
|
372
|
+
"arcane-os/local-ai/nemotron"
|
|
373
|
+
],
|
|
374
|
+
"primaryImport": "arcane-os/local-ai/nemotron",
|
|
375
|
+
"group": "Core native speech",
|
|
376
|
+
"summary": "Default binding for the same createNemotronRuntime function.",
|
|
377
|
+
"availability": "Node with a matching first-party helper, selected NeMo ASR runtime and models; Windows/Linux/macOS source, Android host adaptation",
|
|
378
|
+
"protocol": "Native ASR C ABI through one retained helper and replaying nemotron.state",
|
|
379
|
+
"normalization": "Binding identity equals the named createNemotronRuntime export"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"id": "local-ai-nemotron-build:buildNemotronHelper",
|
|
383
|
+
"name": "buildNemotronHelper",
|
|
384
|
+
"displayName": "buildNemotronHelper()",
|
|
385
|
+
"kind": "function",
|
|
386
|
+
"signature": "async buildNemotronHelper({runtime,outputRoot,signal,onEvent}={})",
|
|
387
|
+
"entrypoints": [
|
|
388
|
+
"arcane-os/local-ai/nemotron/build"
|
|
389
|
+
],
|
|
390
|
+
"primaryImport": "arcane-os/local-ai/nemotron/build",
|
|
391
|
+
"group": "Core native speech",
|
|
392
|
+
"summary": "Builds the first-party retained Nemotron ASR helper against a caller-selected NeMo installation.",
|
|
393
|
+
"availability": "Node with CMake 3.26+, C++17 toolchain and platform-matching public NeMo ASR headers/libraries/CMake package",
|
|
394
|
+
"protocol": "Owned configure/build/install process lifecycle",
|
|
395
|
+
"normalization": "runtime.cmakeDirectory and outputRoot select the prepared upstream installation and owned output. Returns platform/architecture/root/helperExecutable/executable and complete configure/compile/install diagnostics. Preserves cancellation and process failures; installs no dependency, model or toolchain and performs no inference."
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"id": "local-ai-nemotron-build:default",
|
|
399
|
+
"name": "default",
|
|
400
|
+
"displayName": "buildNemotronHelper default export",
|
|
401
|
+
"kind": "function",
|
|
402
|
+
"signature": "default as buildNemotronHelper",
|
|
403
|
+
"entrypoints": [
|
|
404
|
+
"arcane-os/local-ai/nemotron/build"
|
|
405
|
+
],
|
|
406
|
+
"primaryImport": "arcane-os/local-ai/nemotron/build",
|
|
407
|
+
"group": "Core native speech",
|
|
408
|
+
"summary": "Default binding for the same buildNemotronHelper function.",
|
|
409
|
+
"availability": "Node with CMake 3.26+, C++17 toolchain and platform-matching public NeMo ASR headers/libraries/CMake package",
|
|
410
|
+
"protocol": "Owned configure/build/install process lifecycle",
|
|
411
|
+
"normalization": "Binding identity equals the named buildNemotronHelper export"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"id": "local-ai-magpie:createMagpieRuntime",
|
|
415
|
+
"name": "createMagpieRuntime",
|
|
416
|
+
"displayName": "createMagpieRuntime()",
|
|
417
|
+
"kind": "function",
|
|
418
|
+
"signature": "createMagpieRuntime({runtime,prepare,paths,modelAssets,assetProjectionId,resourcePaths,modelId='magpie',voice='Aria',languageCode='en-US',executionTarget,signal,onEvent}={})",
|
|
419
|
+
"entrypoints": [
|
|
420
|
+
"arcane-os/local-ai/magpie"
|
|
421
|
+
],
|
|
422
|
+
"primaryImport": "arcane-os/local-ai/magpie",
|
|
423
|
+
"group": "Core native speech",
|
|
424
|
+
"summary": "Retains native Magpie and NanoCodec for complete audio or ordered PCM synthesis.",
|
|
425
|
+
"availability": "Node with a matching first-party helper, selected NeMo TTS runtime, Magpie/tokenizer and NanoCodec assets; Windows/Linux/macOS source, Android host adaptation",
|
|
426
|
+
"protocol": "Native TTS C ABI through one retained helper and replaying magpie.state",
|
|
427
|
+
"normalization": "Returns current/subscribe/load/unload/synthesize/synthesizeStream/stop/close. Explicit CPU/CUDA selection, model-owned voice map and per-request language remain separate from exact input. Complete wav/pcm export and awaited ordered s16le onAudio delivery share FIFO request ownership. Native speed is 1. Stop targets a requestId and joins native/callback cleanup; self-joins reject MAGPIE_CALLBACK_WAIT. Playback and conversational meaning remain caller-owned; no download or fallback."
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"id": "local-ai-magpie:default",
|
|
431
|
+
"name": "default",
|
|
432
|
+
"displayName": "createMagpieRuntime default export",
|
|
433
|
+
"kind": "function",
|
|
434
|
+
"signature": "default as createMagpieRuntime",
|
|
435
|
+
"entrypoints": [
|
|
436
|
+
"arcane-os/local-ai/magpie"
|
|
437
|
+
],
|
|
438
|
+
"primaryImport": "arcane-os/local-ai/magpie",
|
|
439
|
+
"group": "Core native speech",
|
|
440
|
+
"summary": "Default binding for the same createMagpieRuntime function.",
|
|
441
|
+
"availability": "Node with a matching first-party helper, selected NeMo TTS runtime, Magpie/tokenizer and NanoCodec assets; Windows/Linux/macOS source, Android host adaptation",
|
|
442
|
+
"protocol": "Native TTS C ABI through one retained helper and replaying magpie.state",
|
|
443
|
+
"normalization": "Binding identity equals the named createMagpieRuntime export"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"id": "local-ai-magpie-build:buildMagpieHelper",
|
|
447
|
+
"name": "buildMagpieHelper",
|
|
448
|
+
"displayName": "buildMagpieHelper()",
|
|
449
|
+
"kind": "function",
|
|
450
|
+
"signature": "async buildMagpieHelper({runtime,outputRoot,signal,onEvent}={})",
|
|
451
|
+
"entrypoints": [
|
|
452
|
+
"arcane-os/local-ai/magpie/build"
|
|
453
|
+
],
|
|
454
|
+
"primaryImport": "arcane-os/local-ai/magpie/build",
|
|
455
|
+
"group": "Core native speech",
|
|
456
|
+
"summary": "Builds the first-party Magpie synthesis helper against a caller-selected NeMo installation.",
|
|
457
|
+
"availability": "Node with CMake 3.26+, C++17 toolchain, platform threads and matching public NeMo TTS headers/libraries/CMake package",
|
|
458
|
+
"protocol": "Owned configure/build/install process lifecycle",
|
|
459
|
+
"normalization": "runtime.cmakeDirectory and outputRoot select the prepared upstream installation and owned output. Returns platform/architecture/root/helperExecutable and complete configure/compile/install diagnostics. Preserves cancellation and process failures; installs no dependency, model or toolchain and performs no inference."
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"id": "local-ai-magpie-build:default",
|
|
463
|
+
"name": "default",
|
|
464
|
+
"displayName": "buildMagpieHelper default export",
|
|
465
|
+
"kind": "function",
|
|
466
|
+
"signature": "default as buildMagpieHelper",
|
|
467
|
+
"entrypoints": [
|
|
468
|
+
"arcane-os/local-ai/magpie/build"
|
|
469
|
+
],
|
|
470
|
+
"primaryImport": "arcane-os/local-ai/magpie/build",
|
|
471
|
+
"group": "Core native speech",
|
|
472
|
+
"summary": "Default binding for the same buildMagpieHelper function.",
|
|
473
|
+
"availability": "Node with CMake 3.26+, C++17 toolchain, platform threads and matching public NeMo TTS headers/libraries/CMake package",
|
|
474
|
+
"protocol": "Owned configure/build/install process lifecycle",
|
|
475
|
+
"normalization": "Binding identity equals the named buildMagpieHelper export"
|
|
476
|
+
},
|
|
253
477
|
{
|
|
254
478
|
"id": "local-ai-whisper:createWhisperRuntime",
|
|
255
479
|
"name": "createWhisperRuntime",
|
|
@@ -423,14 +647,14 @@
|
|
|
423
647
|
"name": "createSpeechService",
|
|
424
648
|
"displayName": "createSpeechService()",
|
|
425
649
|
"kind": "function",
|
|
426
|
-
"signature": "createSpeechService({stt,tts,signal}={})",
|
|
650
|
+
"signature": "createSpeechService({stt,tts,signal,autoLoad=true}={})",
|
|
427
651
|
"entrypoints": ["arcane-os/core/speech"],
|
|
428
652
|
"primaryImport": "arcane-os/core/speech",
|
|
429
653
|
"group": "Core native speech",
|
|
430
654
|
"summary": "Composes host-supplied transcription and synthesis engines with independent loading and role readiness.",
|
|
431
655
|
"availability": "Node Core with explicitly supplied engines; engine platform, model and format support remain engine-owned",
|
|
432
|
-
"protocol": "arcane/1 speech.status/load/unload/transcribe/synthesize with speech.state/progress",
|
|
433
|
-
"normalization": "Returns current/subscribe/close/start/methods/drain/dispose; forwards complete requests and results unchanged; replaying service state, synchronous accepted Thinking, combined request/lifetime cancellation and concurrent joined engine shutdown. Explicit load/unload require role stt or tts and forward the remaining activation fields and complete result through that role's configured engine; supported preparation remains with that engine. Startup waiting is independently owned from caller cancellation; no automatic provider selection is introduced."
|
|
656
|
+
"protocol": "arcane/1 speech.status/load/unload/transcribe/synthesize; optional open/push/endpoint/finish/cancel/synthesizeStream/audioConsumed/cancelSynthesis with speech.state/progress/opened/transcription/audio",
|
|
657
|
+
"normalization": "Returns current/subscribe/close/start/methods/drain/dispose; forwards complete requests and results unchanged; replaying service state, synchronous accepted Thinking, combined request/lifetime cancellation and concurrent joined engine shutdown. Explicit load/unload require role stt or tts and forward the remaining activation fields and complete result through that role's configured engine; supported preparation remains with that engine. Per-role supportsStreaming reflects actual engine methods independently of readiness. Request-scoped streaming retains exact PCM and unchanged snapshots; endpoint preserves stream scope, terminal finish drains, and cancellation joins native ownership. Awaited TTS audio acknowledgements apply producer backpressure without blocking control traffic. ASR finals do not decide conversation completion. Startup waiting is independently owned from caller cancellation; no automatic provider selection is introduced. autoLoad:false exposes subscriptions and role capabilities without startup loads; explicit speech.load activates the selected role. Omission preserves independent automatic startup loading."
|
|
434
658
|
},
|
|
435
659
|
{
|
|
436
660
|
"id": "core-speech:default",
|
|
@@ -527,8 +751,8 @@
|
|
|
527
751
|
"group": "Core model assets",
|
|
528
752
|
"summary": "Owns persistent native model acquisitions, temporary browser projections and actual engine retain lifetimes.",
|
|
529
753
|
"availability": "Node Core with an application-selected working directory",
|
|
530
|
-
"protocol": "arcane/1 modelAssets.open/write/complete/release/status and modelAssets.
|
|
531
|
-
"normalization": "Returns current/prepare/retain/release/dispose and Core service lifecycle. Explicit prepare({id,workingDirectory,members
|
|
754
|
+
"protocol": "arcane/1 modelAssets.open/write/complete/release/status/discover/openExisting/prepare/cancelPrepare, modelAssets.state and modelAssets.progress",
|
|
755
|
+
"normalization": "Returns current/discover/openExisting/prepare/retain/release/dispose and Core service lifecycle. Explicit prepare({id,workingDirectory,members=[],archives=[],signal,onProgress,refresh=false}) acquires complete ordered ordinary {path,url} members and optional {url,format:'tar',ranges?,members:[{path,member}]} archive selections, including PAX paths. Complete exact ordered source selections beneath workingDirectory/model-assets are reused without a network freshness check and persist through release, disposal and restart; refresh:true selects a separate acquisition. Interrupted/cancelled transfers retain completed final members and closed partials; retry resumes the same recorded attempt and downloads only missing members. Ordinary HTTP continuation uses retained strong ETag or Last-Modified with Range/If-Range; matching 206 appends, while 200/416/no validator/prior encoded content restarts only that member and retains one earlier partial until replacement succeeds. TAR segment replay preserves completed companions. Transport framing remains internal. Same-process matching callers share acquisition with independent callbacks/cancellation; cancelling one leaves others running, and the final cancellation joins I/O while retaining resumable data. Same-selection processes coordinate their recorded transfer owner, wait, then reuse/resume after release or exit; unrelated transfers stay concurrent. Complete member promotion follows stream/file close; readiness follows all members. Native progress includes phase/state/message/completed/total/unit:'files' and optional memberIndex/path/reason/recovery/error/activity. Phases open/download/reuse/resume/restart/complete/ready/waiting/heartbeat/stalled/interrupted/cancelled/failed expose actual work; five-second heartbeat and stalled after fifteen seconds without source activity do not diagnose an outage or invent percentages. Plain message/recovery are user-facing; complete error remains diagnostic. discover reads explicit directories/catalogs and reports complete model records, ordered GGUF shards and missing companions without load/download/origin claims beyond supplied selections. Readable symlinks use real-path cycle detection. openExisting borrows complete originals, reports MODEL_ASSET_MEMBERS_MISSING with full missing members, and never removes originals. release relinquishes preparation ownership while native retains continue through actual use; browser open/write/complete projections retain their original temporary cleanup. Core exposes discover/openExisting/prepare/cancelPrepare and request-correlated modelAssets.progress; cancelPrepare joins cleanup. Startup downloads nothing; no automatic migration or eviction."
|
|
532
756
|
},
|
|
533
757
|
{
|
|
534
758
|
"id": "core-model-assets-service:default",
|
|
@@ -661,14 +885,14 @@
|
|
|
661
885
|
"name": "createLocalAIService",
|
|
662
886
|
"displayName": "createLocalAIService()",
|
|
663
887
|
"kind": "function",
|
|
664
|
-
"signature": "createLocalAIService(configuration,{appRoot,runtimes=[],signal,onEvent,prepare,executionDevices}={})",
|
|
888
|
+
"signature": "createLocalAIService(configuration,{appRoot,runtimes=[],signal,onEvent,prepare,executionDevices,autoStart=true}={})",
|
|
665
889
|
"entrypoints": ["arcane-os/core/local-ai"],
|
|
666
890
|
"primaryImport": "arcane-os/core/local-ai",
|
|
667
891
|
"group": "Core local AI",
|
|
668
892
|
"summary": "Composes selected native llama.cpp, Ollama and ONNX engines as a Core service with retained process/worker ownership and model lifecycle.",
|
|
669
893
|
"availability": "Node with selected upstream runtime distributions or available configured system services",
|
|
670
894
|
"protocol": "arcane/1 methods and events; llama.cpp OpenAI HTTP/SSE, Ollama native HTTP/NDJSON and ONNX tensor transport",
|
|
671
|
-
"normalization": "Application-owned runtime and model requirements; optional prepare supplies installed records during this service startup. Optional executionDevices supplies a borrowed catalog to ONNX and llama.cpp; its supplying owner retains catalog disposal responsibility. onnx.load forwards executionPreference and executionTarget with existing model-path resolution, cancellation and omitted-target behavior. getONNXRuntime() returns the actual prepared ONNX owner for native composition after context.getService('local-ai'); callers reacquire after recovery and retain the acquired handle for cleanup. llama.load({model,assetProjectionId,resourcePaths,executionTarget}) retains resourcePaths.model from the existing model-assets owner through actual managed process exit. Omitted target retains the same model's selection or configured default; null requests the runtime default. Explicit Windows NVIDIA targets resolve this host's deviceId to its CUDA device identity; unsupported or unavailable selections report their actual failure without substitution. execution distinguishes requested/resolved/configured targets from observedTarget:null. Existing external listeners retain their model/device ownership and reject managed reconfiguration. llama.status/models observe without starting or restarting an engine. Independent services, complete responses and exact owned-process cleanup remain unchanged."
|
|
895
|
+
"normalization": "Application-owned runtime and model requirements; optional prepare supplies installed records during this service startup. Optional executionDevices supplies a borrowed catalog to ONNX and llama.cpp; its supplying owner retains catalog disposal responsibility. onnx.load forwards executionPreference and executionTarget with existing model-path resolution, cancellation and omitted-target behavior. getONNXRuntime() returns the actual prepared ONNX owner for native composition after context.getService('local-ai'); callers reacquire after recovery and retain the acquired handle for cleanup. llama.load({model,assetProjectionId,resourcePaths,executionTarget}) retains resourcePaths.model from the existing model-assets owner through actual managed process exit. Omitted target retains the same model's selection or configured default; null requests the runtime default. Explicit Windows NVIDIA targets resolve this host's deviceId to its CUDA device identity; unsupported or unavailable selections report their actual failure without substitution. execution distinguishes requested/resolved/configured targets from observedTarget:null. Existing external listeners retain their model/device ownership and reject managed reconfiguration. llama.status/models observe without starting or restarting an engine. Independent services, complete responses and exact owned-process cleanup remain unchanged. autoStart:false leaves selected engines unprepared and unstarted at Core startup. Explicit localai.prepare invokes configured preparation, emits complete localai.preparation events, starts configured engines and returns current state. Concurrent callers share preparation and completed preparation is reused; engine/model readiness remains separate. Omission preserves startup preparation."
|
|
672
896
|
},
|
|
673
897
|
{
|
|
674
898
|
"id": "core-local-ai:default",
|
|
@@ -4444,7 +4668,7 @@
|
|
|
4444
4668
|
"summary": "Projects a Core client into the established application-facing Arcane namespace.",
|
|
4445
4669
|
"availability": "Browser and native WebView JavaScript hosts with a Core client",
|
|
4446
4670
|
"protocol": "arcane/1 compatibility facade",
|
|
4447
|
-
"normalization": "Routes namespace methods through client.invoke while retaining operation-specific parameters, correlation, streaming callbacks, timeouts and cancellation; window.state({signal}?) reads the requesting window and window.setState({state},{signal}?) selects normal, maximized or fullscreen. The matching Windows host returns {platform:'windows',supported:true,state}, including observed minimized state, restores normal bounds/frame controls on leaving fullscreen and prevents activation/focus assignment during visible state transitions without changing TopMost, Core, origin or profile. Saved Settings remain application-owned; cancellation does not undo an applied change and unavailable hosts retain their actual errors without fallback. window.setTheme(presentation,{signal}?) forwards the complete per-window backgroundColor/textColor record, with omitted fields unchanged and null reset, and returns the host's actual applied/unsupported result without changing system appearance. notifications.status/show/state/close forward complete caller requests and standard invoke options; status normalizes only METHOD_NOT_ALLOWED with core-namespace-unavailable while retaining the complete original error. Matching native window hosts retain complete notification records and ordered revisions across renderer navigation, with notifications.state events and subscribe-before-snapshot recovery. Submitted means native Show returned, not displayed or read; cancellation after submission does not remove an accepted notice, and explicit close retains its record. Recipient, text, trigger, deduplication and navigation policy remains application-owned. speech.load(request,options) and speech.unload(request,options) forward complete activation requests, cancellation and request observers with no elapsed-time cutoff; selected engines own preparation and native retirement."
|
|
4671
|
+
"normalization": "speech.openStream(request,options) returns streamId/ready/completion/current/push/forceEndpoint/finish/cancel with ordered exact Float32 input and complete snapshot callbacks; endpoint/finish delivery joins must occur outside their own callbacks. Explicit stream cancel joins native cleanup, distinct from ordinary signal cancellation. speech.synthesizeStream(request,{signal,onAudio,onProgress,onRequest}) awaits required ordered Uint8Array PCM callbacks and exact consumption acknowledgements, joins cancellation, and returns complete terminal metadata without playback. Both streams have no fixed timeout. Routes namespace methods through client.invoke while retaining operation-specific parameters, correlation, streaming callbacks, timeouts and cancellation; window.state({signal}?) reads the requesting window and window.setState({state},{signal}?) selects normal, maximized or fullscreen. The matching Windows host returns {platform:'windows',supported:true,state}, including observed minimized state, restores normal bounds/frame controls on leaving fullscreen and prevents activation/focus assignment during visible state transitions without changing TopMost, Core, origin or profile. Saved Settings remain application-owned; cancellation does not undo an applied change and unavailable hosts retain their actual errors without fallback. window.setTheme(presentation,{signal}?) forwards the complete per-window backgroundColor/textColor record, with omitted fields unchanged and null reset, and returns the host's actual applied/unsupported result without changing system appearance. notifications.status/show/state/close forward complete caller requests and standard invoke options; status normalizes only METHOD_NOT_ALLOWED with core-namespace-unavailable while retaining the complete original error. Matching native window hosts retain complete notification records and ordered revisions across renderer navigation, with notifications.state events and subscribe-before-snapshot recovery. Submitted means native Show returned, not displayed or read; cancellation after submission does not remove an accepted notice, and explicit close retains its record. Recipient, text, trigger, deduplication and navigation policy remains application-owned. speech.load(request,options) and speech.unload(request,options) forward complete activation requests, cancellation and request observers with no elapsed-time cutoff; selected engines own preparation and native retirement."
|
|
4448
4672
|
},
|
|
4449
4673
|
{
|
|
4450
4674
|
"id": "core-client:installCoreClient",
|
|
@@ -4584,7 +4808,7 @@
|
|
|
4584
4808
|
"summary": "Creates the SDK-owned provider that assembles one selected app and explicit services into a portable Core payload.",
|
|
4585
4809
|
"availability": "Node; produces a portable payload rather than an executable host",
|
|
4586
4810
|
"protocol": "arcane-native-builder/1 portable provider",
|
|
4587
|
-
"normalization": "Preserves complete selected app and dependency releases; an explicit services selection overrides appDescriptor.native.services, otherwise the descriptor selection is used; optional appDescriptor.native.window carries positive integral logical client width/height, optional resizable and optional state normal/maximized/fullscreen into manifest.window with omitted fields preserved; the selected platform host owns the applied behavior. Generated coreListener opt-in composes one passive model-observation service from the existing host.runtime and actual services exposing localai.status/image.status/decisions.status before listener binding, with absent owners null and renderer attachment separate. Ordinary stdio and sharedHost/headless behavior remains unchanged; no model creation, getService or readiness barrier. Generated runtime/arcane-core.mjs accepts --arcane-app-entry <app-relative-module> through the host's supported Node executable. It imports the packaged app/ module's top-level work with complete process.argv unchanged and no automatic export call; the app owns launch-context reads, services, signals and shutdown. Include the entry and complete source closure through package.nativeResources. The flag skips ordinary Core startup; omission retains it. See mcp-stdio.md#launch-from-a-native-package and core-native-packaging.md#app-owned-runtime-entry. Reports executable:false and never substitutes for an unavailable platform host"
|
|
4811
|
+
"normalization": "Preserves complete selected app and dependency releases; an explicit services selection overrides appDescriptor.native.services, otherwise the descriptor selection is used; optional appDescriptor.native.window carries positive integral logical client width/height, optional resizable and optional state normal/maximized/fullscreen into manifest.window with omitted fields preserved; the selected platform host owns the applied behavior. Generated coreListener opt-in composes one passive model-observation service from the existing host.runtime and actual services exposing localai.status/image.status/decisions.status before listener binding, with absent owners null and renderer attachment separate. Ordinary stdio and sharedHost/headless behavior remains unchanged; no model creation, getService or readiness barrier. Generated runtime/arcane-core.mjs accepts --arcane-app-entry <app-relative-module> through the host's supported Node executable. It imports the packaged app/ module's top-level work with complete process.argv unchanged and no automatic export call; the app owns launch-context reads, services, signals and shutdown. Include the entry and complete source closure through package.nativeResources. The flag skips ordinary Core startup; omission retains it. See mcp-stdio.md#launch-from-a-native-package and core-native-packaging.md#app-owned-runtime-entry. Reports executable:false and never substitutes for an unavailable platform host Build assembles temporarily then publishes at outputRoot/app-id; later successful builds replace only that app. Previous output is retained through completion callback and cancellation acceptance and restored on publication failure. Models and saved state remain in separate persistent directories."
|
|
4588
4812
|
},
|
|
4589
4813
|
{
|
|
4590
4814
|
"id": "native-portable-provider:arcaneNativeBuilderProvider",
|
|
@@ -4626,7 +4850,7 @@
|
|
|
4626
4850
|
"summary": "Assembles selected application services and browser content with the SDK-owned Windows x64 WebView2 and SEA host.",
|
|
4627
4851
|
"availability": "Node for assembly; Windows x64 with WebView2 Runtime for execution",
|
|
4628
4852
|
"protocol": "arcane-native-builder/1 windows-x64 provider",
|
|
4629
|
-
"normalization": "Uses a selected hostDirectory or the exact installed SDK version's numeric release asset; preserves complete payloads; app displayName plus .exe (app ID fallback) and matching .exe.config use Windows filename substitutions only; manifest.host.executable owns inventory, icon, verify and run while generic cache/Core names remain unchanged; native.icon PNG/ICO derives the copied executable and host.icon without an app compiler, while other formats retain assembly with native.icon.unsupported and executableIcon:false; the matching host loads the selected window/taskbar icon and handles window.setTheme with per-field applied/unsupported results; native.window selects initial 96-DPI logical client width/height, optional resizable and optional state normal/maximized/fullscreen through manifest.window. The matching host scales dimensions to actual DPI, fits initial placement to the usable screen and applies an explicit state afterward; omitted fields preserve existing host behavior. Fullscreen fills the selected monitor without a frame and retains normal bounds/frame controls for restoration. Requesting-window window.state/window.setState observe actual minimized/maximized state and prevent activation/focus assignment during visible transitions without selecting TopMost or changing Core, origin or profile. Saved Settings remain application-owned; no saved-bounds subsystem is added and initial-fit logic is not reapplied during later resizing; run cancellation closes stdin and waits for host-owned graceful shutdown. Packaged runtime/ArcaneCore.exe accepts --arcane-app-entry <app-relative-module> directly, without a script argument or GUI launcher; it imports the packaged app/ module's top-level work, preserves complete process.argv and invokes no export. Include the entry and complete source closure through package.nativeResources. The app owns launch-context reads, services, signals and shutdown; the flag skips ordinary Core startup, while omission preserves it. See mcp-stdio.md#launch-from-a-native-package and core-native-packaging.md#app-owned-runtime-entry"
|
|
4853
|
+
"normalization": "Uses a selected hostDirectory or the exact installed SDK version's numeric release asset; preserves complete payloads; app displayName plus .exe (app ID fallback) and matching .exe.config use Windows filename substitutions only; manifest.host.executable owns inventory, icon, verify and run while generic cache/Core names remain unchanged; native.icon PNG/ICO derives the copied executable and host.icon without an app compiler, while other formats retain assembly with native.icon.unsupported and executableIcon:false; the matching host loads the selected window/taskbar icon and handles window.setTheme with per-field applied/unsupported results; native.window selects initial 96-DPI logical client width/height, optional resizable and optional state normal/maximized/fullscreen through manifest.window. The matching host scales dimensions to actual DPI, fits initial placement to the usable screen and applies an explicit state afterward; omitted fields preserve existing host behavior. Fullscreen fills the selected monitor without a frame and retains normal bounds/frame controls for restoration. Requesting-window window.state/window.setState observe actual minimized/maximized state and prevent activation/focus assignment during visible transitions without selecting TopMost or changing Core, origin or profile. Saved Settings remain application-owned; no saved-bounds subsystem is added and initial-fit logic is not reapplied during later resizing; run cancellation closes stdin and waits for host-owned graceful shutdown. Packaged runtime/ArcaneCore.exe accepts --arcane-app-entry <app-relative-module> directly, without a script argument or GUI launcher; it imports the packaged app/ module's top-level work, preserves complete process.argv and invokes no export. Include the entry and complete source closure through package.nativeResources. The app owns launch-context reads, services, signals and shutdown; the flag skips ordinary Core startup, while omission preserves it. See mcp-stdio.md#launch-from-a-native-package and core-native-packaging.md#app-owned-runtime-entry Successful builds publish at outputRoot/app-id through the shared joined replacement lifecycle, retaining previous output through completion/cancellation acceptance and restoring it on failure. Separate runtime caches, models, profiles and unrelated outputs are preserved."
|
|
4630
4854
|
},
|
|
4631
4855
|
{
|
|
4632
4856
|
"id": "native-windows-provider:arcaneNativeBuilderProvider",
|
|
@@ -4668,7 +4892,7 @@
|
|
|
4668
4892
|
"summary": "Composes a complete selected portable payload with the architecture-selected SDK Mac host in an application bundle.",
|
|
4669
4893
|
"availability": "Node assembly; matching Darwin architecture and selected host artifact for execution",
|
|
4670
4894
|
"protocol": "arcane-native-builder/1 macos-arm64 and macos-x64 provider",
|
|
4671
|
-
"normalization": "Resources remains target.rootDir; bundleRoot names the app bundle; selected hostDirectory or exact-version host assets; run closes stdin and awaits graceful drain; source availability does not establish artifact publication or Mac execution"
|
|
4895
|
+
"normalization": "Resources remains target.rootDir; bundleRoot names the app bundle; selected hostDirectory or exact-version host assets; run closes stdin and awaits graceful drain; source availability does not establish artifact publication or Mac execution Accepted bundles use outputRoot/app-id.app; later successful builds replace only that bundle through the joined publication lifecycle, preserving separate model and saved-state directories."
|
|
4672
4896
|
},
|
|
4673
4897
|
{
|
|
4674
4898
|
"id": "native-macos-provider:arcaneNativeBuilderProvider",
|
|
@@ -4749,10 +4973,10 @@
|
|
|
4749
4973
|
"entrypoints": ["arcane-os/core/host"],
|
|
4750
4974
|
"primaryImport": "arcane-os/core/host",
|
|
4751
4975
|
"group": "Native Core host composition",
|
|
4752
|
-
"summary": "Resolves
|
|
4976
|
+
"summary": "Resolves app-private native state/workspace, same-user shared model storage and optional shared endpoint defaults for packaged UI and external MCP.",
|
|
4753
4977
|
"availability": "Node native locations on Windows/Linux/macOS; Android and other hosts supply stateRoot and native adaptation",
|
|
4754
4978
|
"protocol": "Pure native launch-context resolution and existing local IPC",
|
|
4755
|
-
"normalization": "Returns a new complete context with only omitted stateRoot/workspaceRoot and selected sharedHost endpoint/log fields filled; preserves explicit values and additional payloads. Native launchContext presence opts generated entry into resolution; omitted sharedHost retains stdio. Optional coreListener:{endpoint} is preserved without endpoint defaults and attaches to that same window-owned runtime in the generated entry; selecting it together with sharedHost reports TypeError there. No I/O, saved-state discovery, process startup, migration or ArcaneData/Repos change. Malformed selected appId/stateRoot/sharedHost inputs report TypeError; platform IPC errors remain operation-owned."
|
|
4979
|
+
"normalization": "Returns a new complete context with only omitted stateRoot/workspaceRoot/modelsDirectory and selected sharedHost endpoint/log fields filled; preserves explicit values and additional payloads. Native launchContext presence opts generated entry into resolution; omitted sharedHost retains stdio. Optional coreListener:{endpoint} is preserved without endpoint defaults and attaches to that same window-owned runtime in the generated entry; selecting it together with sharedHost reports TypeError there. No I/O, saved-state discovery, process startup, migration or ArcaneData/Repos change. Malformed selected appId/stateRoot/sharedHost inputs report TypeError; platform IPC errors remain operation-owned. On Windows/Linux/macOS an omitted modelsDirectory resolves to the operating-system user's shared Arcane/Models directory, independently of app-private stateRoot/workspaceRoot and disposable native output. An explicit stateRoot does not redirect this shared default; explicit modelsDirectory remains unchanged. Other adapted hosts may supply a shared directory, with omitted modelsDirectory retaining absolute stateRoot/Models. This resolver affects its consumers rather than every provider store and creates, moves or migrates no files; applications may separately discover prior app-local originals."
|
|
4756
4980
|
},
|
|
4757
4981
|
{
|
|
4758
4982
|
"id": "core-host:readCoreLaunchContext",
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"repository": "https://github.com/TheWizardNexus/arcane-os-sdk.git",
|
|
6
6
|
"branch": "main",
|
|
7
7
|
"path": "runtime/arcane",
|
|
8
|
-
"sdkVersion": "0.
|
|
8
|
+
"sdkVersion": "0.95.0",
|
|
9
9
|
"protocol": "arcane/1"
|
|
10
10
|
},
|
|
11
|
-
"artifactCount":
|
|
12
|
-
"javascriptArtifactCount":
|
|
13
|
-
"esmExportCount":
|
|
11
|
+
"artifactCount": 95,
|
|
12
|
+
"javascriptArtifactCount": 93,
|
|
13
|
+
"esmExportCount": 377,
|
|
14
14
|
"artifacts": [
|
|
15
15
|
{
|
|
16
16
|
"file": "runtime/arcane/modules/AI.js",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"AI_READY_EVENT",
|
|
28
28
|
"default"
|
|
29
29
|
],
|
|
30
|
-
"summary": "Owns provider-selectable chat and the
|
|
30
|
+
"summary": "Owns provider-selectable chat and the caller-selected browser/native STT/TTS configuration, lifecycle, synthesis, transcription, and playback boundary.",
|
|
31
31
|
"availability": "Browser + native bridge + TWiN Cloud",
|
|
32
32
|
"protocol": "arcane-ai-browser-speech-configuration/1, AIProviderRuntime arcane-ai-provider/2 routes, globalThis.arcaneEvents, TWiN Cloud HTTPS, Arcane.ollama, Arcane.speech, Android WebView bridge",
|
|
33
33
|
"normalization": "Complete mutable caller-owned browser speech authority, SDK-owned provider registration/replacement/disposal, explicit STT/TTS activation, normalized Whisper STT and Kokoro TTS execution with default capacities 1 and 4 respectively, explicit provider-neutral execution snapshots through status(role,{execution:true}), sticky readiness, canonical window.user readiness without compatibility-event object-identity admission or polling, exact ordered structural calls with required arguments.message, atomic nonblank all-ID tool-result sequencing, complete all-choice streaming/data validation, native Ollama structural adaptation, complete-response then all validated tool callbacks then completion ordering, observed async callbacks, Blob/File transcription, default repeated-formatting-mark removal from cloned outbound TTS input, explicit textFormat:'plain' preservation for complete synthesis/preparation while streaming cleanup remains automatic and caller/visible content stays exact, immediate exact-segment synthesis, per-call voice/speed capture, optional final-segment pause on the existing audio clock, optional per-call terminal playback completion, detached preparation with complete semantic DBOPFS audio reuse and same-owner pending request sharing; each preparation owns its pending activation interest, final-interest cancellation aborts that activation while other interests preserve it, complete cache hits start no model, and cancellation after readiness leaves the ready model loaded; independent prepared playback without a model load for cached audio, ordered audio-clock scheduling, playable audio, active-generation TTS operation-failure routing, mute, and cancellation are normalized; provider/model/runtime/voice policy remains caller-owned. Both speech roles default execution.device to auto: webnn-npu when navigator.ml.createContext is exposed, then webgpu when navigator.gpu is exposed, then wasm for CPU execution. Failed backend loads clean up the pool before trying fresh Workers with the same prepared model and dtype; explicit devices never fall back. STT capacity only accepts 1; TTS accepts 1 through 4. Execution snapshots expose requestedDevice, selectedDevice, maxConcurrentRequests, and activeRequestCount for both roles; selectedDevice is null while unloaded and names the successful upstream session backend request when loaded. It does not prove every operation used the physical NPU: WebNN unsupported operations may use WASM, and compatibility depends on the browser, driver, hardware, and graph. High-level LLM selection defaults to eager activation; startLanguageModel:false preserves the selected tuple and registered adapters without preloading through later readiness callbacks. Caller cancellation waits for accepted old-role cleanup and prevents later configuration/preload, or reaches the first owned load after selection commits. Newer accepted selections supersede older continuations; deferred or cancelled activation stays inactive until explicit load/startup, and a caller abort after successful settlement never unloads the ready model. Separate callers joining an existing runtime load retain their current cancellation ownership.",
|
|
34
|
-
"surface": "Native fetchTTS(payload,signal) and fetchSTT(audio,signal) forward caller cancellation separately from their complete Core speech payloads, normalize aborts to AbortError and suppress late results; actual engine interruption remains service-owned. prepareTTSPlayback(payload,signal) silently returns a real Blob or native-speech descriptor; native controls expose finished/released/state/error/pause/resume/stop, and actual release owns the playback lane. fetchTTS and durable prepareTTS report ARCANE_AI_TTS_AUDIO_EXPORT_UNAVAILABLE for native voices. Request-local model overrides remain exact and never mutate the configured model. Browser-speech protocol/event/error/reason constants; default `AI`; read-only `providerRuntime`, `browserSpeechConfiguration`, and `browserSpeechDescriptor`; explicit `providerRuntime.status(role,{execution:true})` snapshots; `streamTTS(text,end,options={})` with optional voice, speed, pauseAfterMs, and waitForPlayback; default speech-input cleanup with SDK-internal preparation metadata and explicit complete-call textFormat:'plain' consumed before engine dispatch; `prepareTTS({parts,storage,identity,textFormat,signal,onState})` returning ordered segments, state, ready, getAudio(index), and cancel(); async `readPreparedTTS({parts,textFormat,storage,identity,signal,onState})` returning a complete ready handle or null through the same semantic matcher, with no activation, unmute, synthesis, playback, storage writes, or partial repair; manifest, audio availability, and returned-handle reads use DBOPFS createTable:false so absent tables remain absent; supplied adapters own that read-existing behavior; missing matches/audio return null, malformed metadata and storage failures reject, and omitted storage sees only completed matching same-AI in-memory audio; hits replay ready state, misses emit nothing, and the lookup signal detaches on settlement while returned-handle cancellation stays independent; `prepareAudioOutput()` returning the persistent WebAudio handle {kind,state,contextState,error,subscribe,resume,dispose} without resume, unmute, model load, sources, sound, or gesture listeners; current-state replay and output-specific canonical `AI_AUDIO_OUTPUT_STATE_EVENT` (`ai-audio-output-state`), with ready only for an actually running context; explicit owner disposal observes context-bound cleanup and close; `playPreparedTTS(prepared,{signal,onState,audioOutput})` returning state, error, finished, pause(), resume(), and stop() with one playback lane per AI and observational state/error callbacks; explicit live same-AI audioOutput borrows its context until owner disposal, while omission or null preserves per-playback terminal close; configure/dispose speech, route lifecycle, declaration-validated chat/stream requests with exact ordered calls; optional streamRequest toolText:{name,field} and onToolText(text,call,displayId) for decoded selected argument text with actual call identity, distinct from ordinary prose and terminal tool execution; synthesis/transcription and playback controls; initializes from current canonical user readiness, installs `window.ai`, and projects `ai-ready` plus active-generation `ai-tts-failure`. `setAI(llmService,sttService,ttsService,model,modelTTS,modelSTT,options)` and `transitionAI(llmService,sttService,ttsService,model,modelTTS,modelSTT,options)` preserve six positional preferences; `configureProviders(selections,options)` and `transitionProviders(selections,options)` accept the same optional {signal:null,startLanguageModel:true} defaults. setAI retains its synchronous boolean and configureProviders its synchronous route result. Explicit `providerRuntime.load('llm',{signal})` or `startProviders({startLanguageModel:true,signal})` activates a deferred selected route."
|
|
34
|
+
"surface": "Explicit null LLM service and null model constructor arguments leave LLM routes unselected; omitted/empty arguments retain defaults, and an existing window.ai is reused. supportsTranscriptionCapture() and createTranscriptionCapture(options) expose selected-provider capture without starting it. Native capture forwards exact PCM, callbacks and external endpoint/stop/cancel joins; finals are recognition segments, never automatic chat. Streaming native TTS preparation is inert, play consumes ordered PCM and released joins native cleanup. Per-utterance languageCode is forwarded separately from text. voice/speed/languageCode persist with an unfinished streamTTS utterance through finishTTS; explicit language change queues the previous remainder under its prior selection. Native fetchTTS(payload,signal) and fetchSTT(audio,signal) forward caller cancellation separately from their complete Core speech payloads, normalize aborts to AbortError and suppress late results; actual engine interruption remains service-owned. prepareTTSPlayback(payload,signal) silently returns a real Blob or native-speech descriptor; native controls expose finished/released/state/error/pause/resume/stop, and actual release owns the playback lane. fetchTTS and durable prepareTTS report ARCANE_AI_TTS_AUDIO_EXPORT_UNAVAILABLE for browser-native voices without audio export; Magpie retains full-audio export. Request-local model overrides remain exact and never mutate the configured model. Browser-speech protocol/event/error/reason constants; default `AI`; read-only `providerRuntime`, `browserSpeechConfiguration`, and `browserSpeechDescriptor`; explicit `providerRuntime.status(role,{execution:true})` snapshots; `streamTTS(text,end,options={})` with optional voice, speed, languageCode, pauseAfterMs, and waitForPlayback; default speech-input cleanup with SDK-internal preparation metadata and explicit complete-call textFormat:'plain' consumed before engine dispatch; `prepareTTS({parts,storage,identity,textFormat,signal,onState})` returning ordered segments, state, ready, getAudio(index), and cancel(); async `readPreparedTTS({parts,textFormat,storage,identity,signal,onState})` returning a complete ready handle or null through the same semantic matcher, with no activation, unmute, synthesis, playback, storage writes, or partial repair; manifest, audio availability, and returned-handle reads use DBOPFS createTable:false so absent tables remain absent; supplied adapters own that read-existing behavior; missing matches/audio return null, malformed metadata and storage failures reject, and omitted storage sees only completed matching same-AI in-memory audio; hits replay ready state, misses emit nothing, and the lookup signal detaches on settlement while returned-handle cancellation stays independent; `prepareAudioOutput()` returning the persistent WebAudio handle {kind,state,contextState,error,subscribe,resume,dispose} without resume, unmute, model load, sources, sound, or gesture listeners; current-state replay and output-specific canonical `AI_AUDIO_OUTPUT_STATE_EVENT` (`ai-audio-output-state`), with ready only for an actually running context; explicit owner disposal observes context-bound cleanup and close; `playPreparedTTS(prepared,{signal,onState,audioOutput})` returning state, error, finished, pause(), resume(), and stop() with one playback lane per AI and observational state/error callbacks; explicit live same-AI audioOutput borrows its context until owner disposal, while omission or null preserves per-playback terminal close; configure/dispose speech, route lifecycle, declaration-validated chat/stream requests with exact ordered calls; optional streamRequest toolText:{name,field} and onToolText(text,call,displayId) for decoded selected argument text with actual call identity, distinct from ordinary prose and terminal tool execution; synthesis/transcription and playback controls; initializes from current canonical user readiness, installs `window.ai`, and projects `ai-ready` plus active-generation `ai-tts-failure`. `setAI(llmService,sttService,ttsService,model,modelTTS,modelSTT,options)` and `transitionAI(llmService,sttService,ttsService,model,modelTTS,modelSTT,options)` preserve six positional preferences; `configureProviders(selections,options)` and `transitionProviders(selections,options)` accept the same optional {signal:null,startLanguageModel:true} defaults. setAI retains its synchronous boolean and configureProviders its synchronous route result. Explicit `providerRuntime.load('llm',{signal})` or `startProviders({startLanguageModel:true,signal})` activates a deferred selected route."
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"file": "runtime/arcane/modules/AIModelSelectionController.js",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"availability": "Cross-host in-process runtime; registered providers remain browser, native, or cloud specific",
|
|
93
93
|
"protocol": "arcane-ai-runtime/2, arcane-ai-provider/2, arcane-ai-model-authority/1",
|
|
94
94
|
"normalization": "Normalizes mutable complete per-role routes, lifecycle/status, cancellation, streaming cleanup, capacity-1 FIFO LLM/STT lanes, bounded provider-declared parallel TTS requests with FIFO overflow, default repeated-formatting-mark removal from cloned direct TTS payloads or explicit textFormat:'plain' preservation with the control consumed before engine dispatch, local-only selection, direct LLM history/declaration/terminal structural contracts, complete all-choice content/reasoning FIFO iteration, private automatic provider draining with result-first buffering, terminal-only structural calls, exact per-choice observed/terminal correlation, and a separate complete validated terminal result without creating a fallback.",
|
|
95
|
-
"surface": "Protocol constants; singleton-only `AIProviderRuntime`; `aiProviderRuntime`; `getAIProviderRuntime()`; provider registration/identity/selection, closed three-role and STT/TTS-only validation/configuration/replacement, status/catalog/inspection, startup, per-role load/unload/dispose/cancel, dispose-all, request/stream/speech aliases, SDK-internal speech-input preparation metadata, and setSpeechMuted(muted,{signal}={}) controls. Each pending unmute caller owns its abortable interest; the final interest aborts the owned activation while other preparation/playback or joining direct TTS-load interests preserve it. A pre-aborted unmute starts no activation. Explicit mute retains global cancellation and joined unload even with an aborted observer signal."
|
|
95
|
+
"surface": "supportsTranscriptionCapture(providerId=null) reports the provider capture capability; createTranscriptionCapture(options) returns null or an owned start/stop/cancel/destroy/done handle with optional forceEndpoint. Start requires an idle ready selected STT role, remains in the initiating user gesture and is never queued. Capture holds that role until done joins cleanup; cancellation/retirement uses the same role owner. Native streaming TTS uses the existing request lane with ordered awaited PCM callbacks. Protocol constants; singleton-only `AIProviderRuntime`; `aiProviderRuntime`; `getAIProviderRuntime()`; provider registration/identity/selection, closed three-role and STT/TTS-only validation/configuration/replacement, status/catalog/inspection, startup, per-role load/unload/dispose/cancel, dispose-all, request/stream/speech aliases, SDK-internal speech-input preparation metadata, and setSpeechMuted(muted,{signal}={}) controls. Each pending unmute caller owns its abortable interest; the final interest aborts the owned activation while other preparation/playback or joining direct TTS-load interests preserve it. A pre-aborted unmute starts no activation. Explicit mute retains global cancellation and joined unload even with an aborted observer signal."
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
"file": "runtime/arcane/modules/AIResponseURLPolicy.js",
|
|
@@ -442,11 +442,11 @@
|
|
|
442
442
|
"exports": [
|
|
443
443
|
"default"
|
|
444
444
|
],
|
|
445
|
-
"summary": "Owns continuous microphone capture with rolling pre-roll, activity-triggered pause/periodic segments, complete WAV delivery, final flush, and cancellation.",
|
|
445
|
+
"summary": "Owns continuous microphone capture with complete ordered PCM or rolling pre-roll, activity-triggered pause/periodic segments, complete WAV delivery, final flush, and cancellation.",
|
|
446
446
|
"availability": "Browser / native WebView with getUserMedia, AudioContext, and AudioWorklet",
|
|
447
447
|
"protocol": "Native microphone and Web Audio lifecycle; internal VoiceCaptureWorklet MessagePort",
|
|
448
|
-
"normalization": "Complete mono Float32 WAV Blob segments with session-local sequence, pause/periodic/stop reason, and durationMs. Sound amplitude drives segmentation without semantic speech recognition. Inactive audio produces no segment, and periodic segments do not reuse samples. Stop releases microphone tracks immediately and waits for final flush; cancel releases capture and suppresses late callbacks.",
|
|
449
|
-
"surface": "default ContinuousVoiceCapture; constructor({preRollMs=1500,quietMs=2000,chunkMs=30000,activityThreshold=0.02,onSegment,onError,onState}); start({mediaConstraints={audio:true},signal}={}) resolves boolean; stop() resolves after final flush; cancel() and destroy() release the owned session."
|
|
448
|
+
"normalization": "mode:pcm transfers every sample in ordered Float32Array records with actual sampleRate/channels/sequence; amplitude activity reports no semantic speech decision and never gates PCM. flush joins earlier PCM delivery without closing capture. Stop/cancel/destroy join accepted PCM and actual AudioContext close, surfacing failures. In the default segments mode: Complete mono Float32 WAV Blob segments with session-local sequence, pause/periodic/stop reason, and durationMs. Sound amplitude drives segmentation without semantic speech recognition. Inactive audio produces no segment, and periodic segments do not reuse samples. Stop releases microphone tracks immediately and waits for final flush; cancel releases capture and suppresses late callbacks.",
|
|
449
|
+
"surface": "default ContinuousVoiceCapture; constructor({preRollMs=1500,quietMs=2000,chunkMs=30000,activityThreshold=0.02,mode=segments,pcmChunkMs=100,onSegment,onPCM,onActivity,onError,onState}); start({mediaConstraints={audio:true},sampleRate,signal}={}) resolves boolean; flush() resolves after pending PCM delivery; stop() resolves after final flush and close; cancel() and destroy() release the owned session."
|
|
450
450
|
},
|
|
451
451
|
{
|
|
452
452
|
"file": "runtime/arcane/modules/ConversationActionItems.js",
|
|
@@ -991,6 +991,32 @@
|
|
|
991
991
|
"normalization": "Complete mutable definition data with coded syntax errors for malformed input.",
|
|
992
992
|
"surface": "`parseModelDefinition()`, `loadModelDefinitionSystemPrompt()`."
|
|
993
993
|
},
|
|
994
|
+
{
|
|
995
|
+
"file": "runtime/arcane/modules/NativeSpeechCapture.js",
|
|
996
|
+
"name": "NativeSpeechCapture.js",
|
|
997
|
+
"kind": "esm",
|
|
998
|
+
"exports": [
|
|
999
|
+
"default"
|
|
1000
|
+
],
|
|
1001
|
+
"summary": "Connects one microphone lifetime to one retained Core transcription stream without deciding conversational turns.",
|
|
1002
|
+
"availability": "Browser / native WebView with microphone, AudioWorklet and selected streaming Core speech",
|
|
1003
|
+
"protocol": "ContinuousVoiceCapture PCM and Arcane.speech.openStream",
|
|
1004
|
+
"normalization": "Exact ordered mono PCM at the actual declared rate; complete provisional/final snapshots and callback controls. forceEndpoint flushes audio and recognition while preserving capture and stream scope; stop drains terminally; cancel joins capture/native cleanup without claiming a complete transcript.",
|
|
1005
|
+
"surface": "default createNativeSpeechCapture({speech,model,sampleRate=16000,pcmChunkMs=100,activityThreshold=0.02,streamOptions,mediaConstraints,onUpdate,onInterim,onSegment,onActivity,onState,onError,onProgress,onRequest}); returns start({signal,mediaConstraints}), forceEndpoint(), stop(), requestStop(), cancel(reason), destroy(reason), done and current(). Recognition callbacks receive (result,{requestStop}); request a stop then return, and join externally. No implicit model load, conversation reply or fallback."
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
"file": "runtime/arcane/modules/NativeSpeechPlayback.js",
|
|
1009
|
+
"name": "NativeSpeechPlayback.js",
|
|
1010
|
+
"kind": "esm",
|
|
1011
|
+
"exports": [
|
|
1012
|
+
"default"
|
|
1013
|
+
],
|
|
1014
|
+
"summary": "Prepares an inert native speech descriptor and plays ordered PCM through the existing shared Web Audio owner.",
|
|
1015
|
+
"availability": "Browser / native WebView with Web Audio and selected streaming speech",
|
|
1016
|
+
"protocol": "speech.synthesizeStream with awaited PCM consumption",
|
|
1017
|
+
"normalization": "Preparation starts no synthesis or playback. play schedules every supplied s16le sample in original order with audio-clock backpressure. Pause retains playback position; stop cancels only that utterance. finished and released distinguish playback termination from joined native cleanup; errors remain observable.",
|
|
1018
|
+
"surface": "default prepareNativeSpeechPlayback({speech,request,getAudioContext,signal=null}); returns {kind:native-speech,input,voice,language,speed,play}. play({signal,onState}) returns finished/released/state/error/pause/resume/stop. The caller owns its AudioContext; this module never closes unrelated output."
|
|
1019
|
+
},
|
|
994
1020
|
{
|
|
995
1021
|
"file": "runtime/arcane/modules/Ollama.js",
|
|
996
1022
|
"name": "Ollama.js",
|
|
@@ -1462,11 +1488,11 @@
|
|
|
1462
1488
|
"name": "VoiceCaptureWorklet.js",
|
|
1463
1489
|
"kind": "worker",
|
|
1464
1490
|
"exports": [],
|
|
1465
|
-
"summary": "
|
|
1491
|
+
"summary": "Transfers continuous PCM or segments microphone samples on the audio rendering thread and transfers complete mono Float32 WAV clips to ContinuousVoiceCapture.",
|
|
1466
1492
|
"availability": "AudioWorkletGlobalScope",
|
|
1467
1493
|
"protocol": "AudioWorklet processor arcane-continuous-voice-capture and its owner-local MessagePort",
|
|
1468
|
-
"normalization": "
|
|
1469
|
-
"surface": "No ESM exports. ContinuousVoiceCapture loads this static worklet, supplies processorOptions, receives segment messages, and requests stop followed by the stopped acknowledgement."
|
|
1494
|
+
"normalization": "mode:pcm emits every original sample in ordered PCM frames at the actual worklet sample rate, plus activity observations; pcmChunkMs defines transport scheduling, not a recording cap. flush returns pending PCM and a correlated flushed acknowledgement without closing the processor. The default segments mode retains rolling pre-roll, fixed 20 ms RMS activity windows independent of callback length, audio-frame quiet duration, periodic boundaries, sequence, complete original WAV audio, and stop acknowledgement. activityThreshold is RMS amplitude, not peak amplitude. Stop classifies a partial final window using its actual samples and retains softer trailing audio in the active clip. Inactive capture emits no clips; adjacent periodic clips have no repeated samples.",
|
|
1495
|
+
"surface": "No ESM exports. ContinuousVoiceCapture loads this static worklet, supplies processorOptions, receives segment or pcm/activity/flushed messages, and requests stop followed by the stopped acknowledgement."
|
|
1470
1496
|
},
|
|
1471
1497
|
{
|
|
1472
1498
|
"file": "runtime/arcane/modules/WaitForComponent.js",
|