arcane-os 0.70.0 → 0.71.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 +8 -0
- package/README.md +1 -1
- package/docs/reference/README.md +2 -0
- package/docs/reference/inventory/package-api.json +3 -3
- package/docs/reference/inventory/runtime-components.json +2 -2
- package/docs/reference/inventory/runtime-modules.json +3 -3
- package/docs/reference/runtime-components.md +35 -1
- package/docs/reference/sdk-api.md +28 -1
- package/package.json +1 -1
- package/runtime/arcane/components/theme-switcher.html +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.71.0
|
|
4
|
+
|
|
5
|
+
- Add public theme-switcher CSS properties for group radius, option radius,
|
|
6
|
+
option font and group background. Applications can select modest rounded
|
|
7
|
+
rectangles and ordinary labels through the shared component while retaining
|
|
8
|
+
its existing literal defaults, complete labels, wrapping, native-button
|
|
9
|
+
targets, selected hover, keyboard focus, disabled state and theme persistence.
|
|
10
|
+
|
|
3
11
|
## 0.70.0
|
|
4
12
|
|
|
5
13
|
- Add app-scoped DBOPFS committed-change subscriptions through the existing
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ selected SDK projection or an explicit live SDK source mount. Both profiles
|
|
|
20
20
|
share the theme, packaging, event, cancellation,
|
|
21
21
|
and browser run contracts while retaining their selected application layout.
|
|
22
22
|
|
|
23
|
-
This checkout defines the `0.
|
|
23
|
+
This checkout defines the `0.71.0` SDK contract. Development applications declare
|
|
24
24
|
`arcane-os` as `latest` and retain their lockfile. Exact SDK pins begin when Roshi
|
|
25
25
|
designates a production build. Follow [Consumer updates](docs/consumer-updates.md)
|
|
26
26
|
to refresh and compare the installed SDK and lockfile with the published channel;
|
package/docs/reference/README.md
CHANGED
|
@@ -52,6 +52,8 @@ alone does not make bare module names resolve in a browser.
|
|
|
52
52
|
| Present Light / Dark / System choices with complete labels | [Theme-switcher configuration](runtime-components.md#theme-switcherhtml) |
|
|
53
53
|
| Use optional Core preferences and appearance without masking real failures | [PreferenceStore](runtime-modules.md#preferencestorejs), [SystemAppearance](runtime-modules.md#systemappearancejs), and [Core lookup errors](core-runtime.md#state-and-frames) |
|
|
54
54
|
| Submit complete speech parts immediately and play them in order | [`SpeechPlayback`](runtime-modules.md#speechplaybackjs) and the [basic browser example](ai/browser-speech.md#play-a-complete-array-with-speechplayback) |
|
|
55
|
+
| Preserve exact text in an explicit complete synthesis call | [Exact complete synthesis input](ai/browser-speech.md#exact-complete-synthesis-input) and [managed AI narration](sdk-api.md#managed-ai-narration) |
|
|
56
|
+
| Select initial native window dimensions and resizing behavior | [Initial native window size](core-native-packaging.md#initial-native-window-size) and [Windows provider](sdk-api.md#createwindowsnativeprovider) |
|
|
55
57
|
| Call `globalThis.Arcane` | [Arcane Core API](core/arcane-api.md) |
|
|
56
58
|
| Connect a browser to one Core transport | [Core browser client](core-client.md) |
|
|
57
59
|
| Cancel one Core speech synthesis request without changing its payload | [Speech request lifetime](core-client.md#events-and-request-lifetime) and [Core facade](sdk-api.md#createcorefacade) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"sdkVersion": "0.
|
|
3
|
+
"sdkVersion": "0.69.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",
|
|
@@ -4374,7 +4374,7 @@
|
|
|
4374
4374
|
"summary": "Creates the SDK-owned provider that assembles one selected app and explicit services into a portable Core payload.",
|
|
4375
4375
|
"availability": "Node; produces a portable payload rather than an executable host",
|
|
4376
4376
|
"protocol": "arcane-native-builder/1 portable provider",
|
|
4377
|
-
"normalization": "Preserves complete selected app and dependency releases; an explicit services selection overrides appDescriptor.native.services, otherwise the descriptor selection is used; reports executable:false and never substitutes for an unavailable platform host"
|
|
4377
|
+
"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 and optional resizable into manifest.window with omitted fields preserved; reports executable:false and never substitutes for an unavailable platform host"
|
|
4378
4378
|
},
|
|
4379
4379
|
{
|
|
4380
4380
|
"id": "native-portable-provider:arcaneNativeBuilderProvider",
|
|
@@ -4416,7 +4416,7 @@
|
|
|
4416
4416
|
"summary": "Assembles selected application services and browser content with the SDK-owned Windows x64 WebView2 and SEA host.",
|
|
4417
4417
|
"availability": "Node for assembly; Windows x64 with WebView2 Runtime for execution",
|
|
4418
4418
|
"protocol": "arcane-native-builder/1 windows-x64 provider",
|
|
4419
|
-
"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; run cancellation closes stdin and waits for host-owned graceful shutdown"
|
|
4419
|
+
"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 and optional resizable through manifest.window, the matching host scales to actual DPI and fits initial placement to the usable screen while omitted fields and existing restored non-normal state remain unchanged; 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"
|
|
4420
4420
|
},
|
|
4421
4421
|
{
|
|
4422
4422
|
"id": "native-windows-provider:arcaneNativeBuilderProvider",
|
|
@@ -967,7 +967,7 @@
|
|
|
967
967
|
{
|
|
968
968
|
"file": "runtime/arcane/components/theme-switcher.html",
|
|
969
969
|
"name": "theme-switcher.html",
|
|
970
|
-
"purpose": "Selects and refreshes system, light, dark, or custom theme mode with per-instance choices and
|
|
970
|
+
"purpose": "Selects and refreshes system, light, dark, or custom theme mode with per-instance choices, labels, and CSS-configurable group/option radii, option font and group background.",
|
|
971
971
|
"methods": [
|
|
972
972
|
"configure()",
|
|
973
973
|
"setMode()",
|
|
@@ -980,7 +980,7 @@
|
|
|
980
980
|
],
|
|
981
981
|
"availability": "Browser and supported native WebViews",
|
|
982
982
|
"transport": "HTMLImport + DOM; injected Arcane/provider modules where listed",
|
|
983
|
-
"normalization": "Preference/native appearance behavior mixed; no component-ready contract"
|
|
983
|
+
"normalization": "Preference/native appearance behavior mixed; selected button background, text and outline remain visible during hover while the hover fill applies only to unselected enabled buttons; no component-ready contract"
|
|
984
984
|
},
|
|
985
985
|
{
|
|
986
986
|
"file": "runtime/arcane/components/unified-inbox.html",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"summary": "Owns provider-selectable chat and the one-time caller-authority browser STT/TTS configuration, lifecycle, synthesis, transcription, and playback boundary.",
|
|
30
30
|
"availability": "Browser + native bridge + TWiN Cloud",
|
|
31
31
|
"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",
|
|
32
|
-
"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,
|
|
33
|
-
"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;
|
|
32
|
+
"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, 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.",
|
|
33
|
+
"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(); `playPreparedTTS(prepared,{signal,onState})` returning state, error, finished, pause(), resume(), and stop() with one playback lane per AI and observational state/error callbacks; 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`."
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"file": "runtime/arcane/modules/AIModelSelectionController.js",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"summary": "Provider-neutral selection, lifecycle, routing, startup, request, streaming, cancellation, and independent LLM/STT/TTS state.",
|
|
91
91
|
"availability": "Cross-host in-process runtime; registered providers remain browser, native, or cloud specific",
|
|
92
92
|
"protocol": "arcane-ai-runtime/2, arcane-ai-provider/2, arcane-ai-model-authority/1",
|
|
93
|
-
"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,
|
|
93
|
+
"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.",
|
|
94
94
|
"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 mute controls."
|
|
95
95
|
},
|
|
96
96
|
{
|
|
@@ -112,7 +112,7 @@ snapshot remains owned until the browser's `afterprint` event.
|
|
|
112
112
|
| [`task-progress.html`](#task-progresshtml) | Runs and displays a task list with started/change/complete/error state. | `configure()`<br>`setTasks()`<br>`updateTask()`<br>`runTasks()`<br>`clear()`<br>`destroy()` | `task-progress-ready`<br>`task-progress-started`<br>`task-progress-change`<br>`task-progress-complete`<br>`task-progress-error` | Task state normalized; injected task results mixed |
|
|
113
113
|
| [`terminal-workspace.html`](#terminal-workspacehtml) | Presents multiple terminal sessions, output, active selection, theme, and terminal actions. | `configure()`<br>`addSession()`<br>`removeSession()`<br>`activateSession()`<br>`append()`<br>`clear()`<br>`setState()`<br>`setTheme()`<br>`focus()`<br>`destroy()` | `terminal-workspace-ready`<br>`terminal-submit`<br>`terminal-interrupt`<br>`terminal-clear`<br>`terminal-session-new`<br>`terminal-session-close`<br>`terminal-session-select`<br>`terminal-settings` | UI/session state normalized; native command results supplied externally |
|
|
114
114
|
| [`theme-editor.html`](#theme-editorhtml) | Edits, previews, saves, and resets semantic custom theme tokens. | `configure()`<br>`getTheme()`<br>`setTheme()`<br>`setBusy()`<br>`setStatus()`<br>`destroy()` | `theme-editor-ready`<br>`theme-preview`<br>`theme-save`<br>`theme-reset` | Fully normalized Theme values |
|
|
115
|
-
| [`theme-switcher.html`](#theme-switcherhtml) | Selects and refreshes system, light, dark, or custom theme mode with per-instance choices and
|
|
115
|
+
| [`theme-switcher.html`](#theme-switcherhtml) | Selects and refreshes system, light, dark, or custom theme mode with per-instance choices, labels, and CSS-configurable group/option radii, option font and group background. | `configure()`<br>`setMode()`<br>`refresh()` | No component-specific event | Preference/native appearance behavior mixed; no component-ready contract |
|
|
116
116
|
| [`unified-inbox.html`](#unified-inboxhtml) | Displays provider-neutral communication threads with active/loading state. | `configure()`<br>`setThreads()`<br>`setActive()`<br>`setLoading()`<br>`destroy()` | `unified-inbox-ready`<br>`inbox-refresh`<br>`thread-select` | DOM-normalized |
|
|
117
117
|
| [`voice-transcription.html`](#voice-transcriptionhtml) | Records manual clips or optional continuous microphone audio with pause/periodic segments, ordered transcription and saves, retained failures, and complete transcript delivery. | `configure()`<br>`requestSTTActivation()`<br>`startRecording()`<br>`stopRecording()`<br>`retryTranscription()`<br>`cancelRecording()`<br>`save()`<br>`completeTranscription()/complete()`<br>`clear()`<br>`reset()`<br>`destroy()` | `voice-transcription-ready`<br>`voice-transcription-state`<br>`voice-transcription-segment`<br>`voice-transcription-empty`<br>`voice-transcription-error`<br>`voice-transcription-change`<br>`voice-transcription-complete`<br>`speech-transcription-complete`<br>`speech-transcription-cancelled`<br>`speech-stt-activation-request`<br>`speech-stt-activation-error` | Sticky STT readiness, capture/queue lifecycle, retry, cancellation, and complete state/text are normalized; media/provider behavior remains external |
|
|
118
118
|
| [`weather-widget.html`](#weather-widgethtml) | Displays normalized current and daily weather with refresh intent. | `setWeather()`<br>`clear()`<br>`destroy()` | `weather-widget-ready`<br>`weather-refresh` | Display normalized; provider supplied externally |
|
|
@@ -2073,6 +2073,24 @@ The host inherits text color. Existing `--app-bar-border` (falling back to
|
|
|
2073
2073
|
remain supported. Applications own their palette and surrounding placement;
|
|
2074
2074
|
the component adds no application-specific palette or settings section.
|
|
2075
2075
|
|
|
2076
|
+
Set these public CSS custom properties on the `html-import` host or an ancestor
|
|
2077
|
+
to style one instance through the ordinary cascade. Omitting them preserves the
|
|
2078
|
+
existing presentation:
|
|
2079
|
+
|
|
2080
|
+
| Property | Controls | Default |
|
|
2081
|
+
| --- | --- | --- |
|
|
2082
|
+
| `--theme-switcher-radius` | Outer group border radius | `1.6rem` |
|
|
2083
|
+
| `--theme-switcher-option-radius` | Each option's border radius | `1.4rem` |
|
|
2084
|
+
| `--theme-switcher-font` | Complete option `font` shorthand | `700 .875rem/1.25 system-ui,sans-serif` |
|
|
2085
|
+
| `--theme-switcher-background` | Group background, independent of option state | `color-mix(in srgb,currentColor 8%,transparent)` |
|
|
2086
|
+
|
|
2087
|
+
The font value includes its size and family, plus any weight and line height.
|
|
2088
|
+
Use an application-owned complete font token or value, rather than the
|
|
2089
|
+
CSS-wide keyword `inherit` as the custom-property value. The host still inherits
|
|
2090
|
+
text color. These properties do not alter the `2.75rem` minimum targets,
|
|
2091
|
+
full-label wrapping, selected/hover/focus/disabled states, or theme persistence.
|
|
2092
|
+
Applications retain responsibility for readable font and color choices.
|
|
2093
|
+
|
|
2076
2094
|
This fragment declares no component-specific readiness or action event; use the loader's `html-import-ready` only to know that import execution completed.
|
|
2077
2095
|
|
|
2078
2096
|
Shared dependencies: [`ThemeManager.js`](runtime-modules.md#thememanagerjs).
|
|
@@ -2097,6 +2115,22 @@ the two configuration attributes retains all four default choices. Both use
|
|
|
2097
2115
|
the existing shared preference owner; presentation does not create a new store
|
|
2098
2116
|
or migrate saved themes.
|
|
2099
2117
|
|
|
2118
|
+
An application can give that instance modest rounded corners and its own
|
|
2119
|
+
ordinary label font without accessing the shadow root:
|
|
2120
|
+
|
|
2121
|
+
```css
|
|
2122
|
+
#theme-switcher {
|
|
2123
|
+
--theme-switcher-radius: .65rem;
|
|
2124
|
+
--theme-switcher-option-radius: .5rem;
|
|
2125
|
+
--theme-switcher-font: 400 1rem/1.25 var(--app-font-family, system-ui, sans-serif);
|
|
2126
|
+
--theme-switcher-background: transparent;
|
|
2127
|
+
--app-bar-border: var(--border-color);
|
|
2128
|
+
}
|
|
2129
|
+
```
|
|
2130
|
+
|
|
2131
|
+
These are example application values, not new component defaults. Other
|
|
2132
|
+
instances retain the defaults unless the application cascades overrides to them.
|
|
2133
|
+
|
|
2100
2134
|
## unified-inbox.html
|
|
2101
2135
|
|
|
2102
2136
|
### Overview
|
|
@@ -136,7 +136,7 @@ Root applications import `AI` through `arcane-os/ai` in the managed browser map.
|
|
|
136
136
|
`ai.prepareTTSPlayback(payload,signal)` silently prepares real Blob audio or a
|
|
137
137
|
native speech descriptor for playback. Native browser voices expose no audio
|
|
138
138
|
file; use this path or shared streaming/SpeechPlayback for native output.
|
|
139
|
-
`ai.prepareTTS({parts,storage,identity,signal,onState})` prepares complete
|
|
139
|
+
`ai.prepareTTS({parts,storage,identity,textFormat,signal,onState})` prepares complete
|
|
140
140
|
punctuation segments without playing them and optionally saves/reuses their
|
|
141
141
|
audio through application-owned DBOPFS. Its immediate handle exposes ordered
|
|
142
142
|
segments, preparation state, `ready`, `getAudio(index)`, and `cancel()`.
|
|
@@ -149,6 +149,17 @@ for complete inputs, storage ownership, progress, errors, and cancellation,
|
|
|
149
149
|
and [AI.js](runtime-modules.md#aijs) for the managed runtime contract.
|
|
150
150
|
These are AI instance methods, not new npm export names.
|
|
151
151
|
|
|
152
|
+
Complete synthesis calls can select `textFormat:'plain'` to preserve supplied
|
|
153
|
+
speech text, including repeated formatting marks and surrounding whitespace.
|
|
154
|
+
This applies to `ai.fetchTTS(payload,signal)`, audio-file preparation through
|
|
155
|
+
`ai.prepareTTSPlayback(payload,signal)`, durable `ai.prepareTTS(...)`, provider
|
|
156
|
+
runtime TTS requests and direct Kokoro synthesis. The SDK consumes the control
|
|
157
|
+
before engine dispatch; durable preparation retains the existing punctuation
|
|
158
|
+
segmentation. Omitted or other values retain automatic speech cleanup.
|
|
159
|
+
Streaming `streamTTS`, `finishTTS` and shared `SpeechPlayback` retain their
|
|
160
|
+
automatic cleanup; this option does not change upstream engine capacity.
|
|
161
|
+
See [exact complete synthesis input](ai/browser-speech.md#exact-complete-synthesis-input).
|
|
162
|
+
|
|
152
163
|
## Shared operation contract
|
|
153
164
|
|
|
154
165
|
High-level operations accept one options object. Common fields are `workspaceRoot`, `appId`, `target`, `signal`, and `onEvent`; only fields meaningful to that operation are consumed. Long work acknowledges first, owns its child tasks, keeps event delivery ordered and backpressured, emits progress or heartbeats, observes cancellation where safe, and rejects with `ArcaneError` on failure.
|
|
@@ -7530,6 +7541,12 @@ published SDK/runtime dependencies and the canonical Core entry/client into a
|
|
|
7530
7541
|
fresh output directory. Service factories are imported only when a real native
|
|
7531
7542
|
host later launches the generated Core entry, never during packaging.
|
|
7532
7543
|
|
|
7544
|
+
An optional `appDescriptor.native.window` record carries `width`, `height` and
|
|
7545
|
+
`resizable` into `manifest.window`. Dimensions are positive integral logical
|
|
7546
|
+
client units; `resizable` is an optional boolean. Omitted fields remain omitted.
|
|
7547
|
+
The portable payload records the selection; the selected platform host owns
|
|
7548
|
+
its window behavior. See [initial native window size](core-native-packaging.md#initial-native-window-size).
|
|
7549
|
+
|
|
7533
7550
|
### Availability and normalization
|
|
7534
7551
|
|
|
7535
7552
|
**Node; produces a portable payload rather than an executable host.** Existing
|
|
@@ -7641,6 +7658,16 @@ the selected output root. There is no compiler or OS checkout requirement for
|
|
|
7641
7658
|
application builds. The build machine needs its normal Node/npm toolchain and
|
|
7642
7659
|
`tar`; execution needs Windows x64, .NET Framework 4.6.2 or later and WebView2.
|
|
7643
7660
|
|
|
7661
|
+
The matching Windows host consumes `appDescriptor.native.window` through
|
|
7662
|
+
`manifest.window`. Optional `width` and `height` select initial client dimensions
|
|
7663
|
+
in 96-DPI logical units; the host scales them for its actual DPI and fits the
|
|
7664
|
+
outer window within the current screen's usable area. Optional `resizable:false`
|
|
7665
|
+
selects a fixed-size border and disables maximizing. Omitted fields preserve
|
|
7666
|
+
the existing host defaults. Initial sizing preserves a window already restored
|
|
7667
|
+
to a non-normal state and does not add saved-bounds storage. The initial-fit
|
|
7668
|
+
logic is not reapplied during later user resizing. See [initial native window size](core-native-packaging.md#initial-native-window-size)
|
|
7669
|
+
for a complete descriptor example and the other-platform boundary.
|
|
7670
|
+
|
|
7644
7671
|
The returned `arcane-native-builder/1` provider exposes `describe`, `doctor`,
|
|
7645
7672
|
`prepare`, `build`, `verify` and `run`. Build returns `{app,target,manifest}`
|
|
7646
7673
|
with the actual directory at `target.rootDir`. Verification reads the artifact;
|
package/package.json
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
max-inline-size:100%;
|
|
16
16
|
padding:.2rem;
|
|
17
17
|
border:1px solid var(--app-bar-border,var(--border-color,rgba(255,255,255,.25)));
|
|
18
|
-
border-radius:1.6rem;
|
|
19
|
-
background:color-mix(in srgb,currentColor 8%,transparent);
|
|
18
|
+
border-radius:var(--theme-switcher-radius,1.6rem);
|
|
19
|
+
background:var(--theme-switcher-background,color-mix(in srgb,currentColor 8%,transparent));
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
button {
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
min-block-size:2.75rem;
|
|
29
29
|
padding:.5rem .75rem;
|
|
30
30
|
border:0;
|
|
31
|
-
border-radius:1.4rem;
|
|
31
|
+
border-radius:var(--theme-switcher-option-radius,1.4rem);
|
|
32
32
|
background:transparent;
|
|
33
33
|
color:inherit;
|
|
34
34
|
cursor:pointer;
|
|
35
|
-
font:700 .875rem/1.25 system-ui,sans-serif;
|
|
35
|
+
font:var(--theme-switcher-font,700 .875rem/1.25 system-ui,sans-serif);
|
|
36
36
|
text-align:center;
|
|
37
37
|
white-space:normal;
|
|
38
38
|
overflow-wrap:anywhere;
|