arcane-os 0.51.1 → 0.51.2

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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.51.2
4
+
5
+ - Forward caller-selected `temperature` through the focused TWiN Cloud
6
+ `fetchRequest` and the full AI TWiN fetch/stream paths, including their
7
+ built-in provider adapters. Preserve explicit `0`; omission or `undefined`
8
+ leaves the provider default in effect. The value remains request-local and
9
+ is retained by existing observers and retries. No clamp, saved preference,
10
+ output limit, native Ollama option mapping, or new dependency is introduced.
11
+ Complete messages, selected model, reasoning behavior, response content,
12
+ cancellation, other providers, and existing positional APIs stay unchanged.
13
+
3
14
  ## 0.51.1
4
15
 
5
16
  - Restore the published `node-http-server` MIME map in development and packaged
package/README.md CHANGED
@@ -15,11 +15,12 @@
15
15
 
16
16
  `arcane-os` is the application SDK and command-line toolchain for Arcane OS. It
17
17
  supports two explicit workspace profiles: an external app repository uses the
18
- version-locked SDK runtime, while an integrated Arcane checkout uses its live
19
- `arcane/` runtime. Both profiles share the theme, packaging, event, cancellation,
18
+ version-locked SDK runtime, while an integrated Arcane checkout consumes its
19
+ selected SDK projection or an explicit live SDK source mount. Both profiles
20
+ share the theme, packaging, event, cancellation,
20
21
  and browser run contracts while retaining their selected application layout.
21
22
 
22
- This checkout defines the `0.51.1` SDK contract. Applications pin one exact npm
23
+ This checkout defines the `0.51.2` SDK contract. Applications pin one exact npm
23
24
  version and lockfile; registry state is deliberately not baked into application
24
25
  artifacts.
25
26
 
@@ -73,19 +74,35 @@ Enabled browser delivery also mounts the shared, themed installation suggestion.
73
74
  It appears when the browser offers installation, includes Install and Close,
74
75
  and remembers dismissal for the tab session without interrupting page startup.
75
76
 
76
- That registry query is a maintainer action, not an application behavior. Apps
77
+ Registry queries are maintainer actions. Apps
77
78
  never poll npm for SDK updates or replace their own SDK or synchronized runtime.
78
79
  The app repository's exact dependency and lockfile select the SDK; changing that
79
80
  selection is an explicit repository update. Tests and checks run only when the
80
81
  user expressly selects them, or when required for a selected release output.
81
82
 
83
+ ## Current capabilities
84
+
85
+ | Build this | Start here |
86
+ | --- | --- |
87
+ | A standalone browser app with shared theme, components, source serving and PWA resources | [Beginner quick start](#beginner-quick-start), [CLI](docs/reference/cli.md), [PWA](docs/reference/pwa.md) |
88
+ | Streaming or complete AI responses, structural tools and a model selected for one request | [AI runtime](docs/reference/runtime-modules.md#aijs), [TWiN Cloud](docs/reference/ai/twin-cloud.md) |
89
+ | Stateless state-and-questions evaluation or image generation | [`fetchSystemOneRequest`](docs/reference/ai/twin-cloud.md#evaluate-caller-owned-state-with-system-one), [`generateImages`](docs/reference/ai/twin-cloud.md#generate-images-with-an-application-selected-model) |
90
+ | Browser-local language models with an application-owned model catalog | [Browser-WASM AI](docs/reference/ai/browser-wasm.md) |
91
+ | Local Whisper/Kokoro, native browser recognition and voices, or selected cloud speech | [Speech provider guide](docs/reference/ai/browser-speech.md) |
92
+ | Editable live transcription, ordered speech playback and printed conversations | [Chat](docs/reference/runtime-components.md#chathtml), [SpeechPlayback](docs/reference/runtime-modules.md#speechplaybackjs) |
93
+ | Complete saved conversations, request-only turns, document retrieval and stored Markdown images | [Chat sessions](docs/reference/runtime-modules.md#persistentaichatsessionjs), [document library](docs/reference/runtime-modules.md#dbopfsdocumentlibraryjs), [MarkdownMedia](docs/reference/runtime-modules.md#markdownmediajs) |
94
+ | Windows, Linux or Android development output from the same app | [Native target matrix](docs/platform-targets.md) |
95
+
96
+ Provider and platform availability are documented at each surface. Applications
97
+ own model selection, credentials, prompts, saved data and product behavior.
98
+
82
99
  ## Beginner quick start
83
100
 
84
101
  Create one browser application, install its pinned SDK, and start its source
85
102
  server:
86
103
 
87
104
  ```bash
88
- npx arcane-os@0.34.1 new hello-speech --path ./hello-speech --target browser
105
+ npx arcane-os@latest new hello-speech --path ./hello-speech --target browser
89
106
  cd hello-speech
90
107
  npm install
91
108
  ```
@@ -135,24 +152,26 @@ PWA and storage availability still depend on the browser's secure-context
135
152
  rules; see [HTTP development](docs/reference/cli.md#explicit-http-development).
136
153
 
137
154
  Open the URL printed by the server. The generated page owns its import map and
138
- Arcane theme; its application module is `apps/hello-speech/modules/App.js`.
139
- `arcane/AI` is a managed **browser import**, not an npm-exported Node inference
140
- module.
155
+ Arcane theme; its application module is `modules/App.js` at the repository root.
156
+ Root applications use managed `arcane-os/*` browser imports. Importing
157
+ `arcane-os/ai` resolves the shared AI module; its browser lifecycle still
158
+ requires the documented browser environment. For a stateless Node request,
159
+ use `arcane-os/ai/twin-cloud`.
141
160
 
142
161
  For a first spoken sentence, copy the application-owned
143
162
  [`speech-selection.js` configuration from the speech quick start](https://github.com/TheWizardNexus/arcane-os-sdk/blob/main/docs/reference/ai/browser-speech.md#quick-start-say-one-sentence)
144
163
  beside `App.js`, then use this module. That one configuration file defines the
145
164
  upstream runtime, model, dtype, and voice. This module creates the application's
146
165
  DBOPFS store; the SDK creates and manages its speech providers and Workers.
147
- The linked automatic/WebGPU-first selection uses `fp32` because
166
+ The linked automatic NPU/GPU/CPU selection uses `fp32` because
148
167
  [Kokoro.js recommends `fp32` when using WebGPU](https://github.com/hexgrad/kokoro/tree/main/kokoro.js#usage).
149
168
  Its `selectedDevice` status reports the loaded route, not speech correctness or
150
169
  audio quality.
151
170
 
152
171
  ```javascript
153
- import arcaneThemeReady from 'arcane/ThemeBootstrap';
154
- import AI, { AI_BROWSER_SPEECH_CONFIGURATION_PROTOCOL } from 'arcane/AI';
155
- import DBOPFS from 'arcane/DBOPFS';
172
+ import arcaneThemeReady from 'arcane-os/modules/ThemeBootstrap.js';
173
+ import AI, { AI_BROWSER_SPEECH_CONFIGURATION_PROTOCOL } from 'arcane-os/ai';
174
+ import DBOPFS from 'arcane-os/modules/DBOPFS.js';
156
175
  import { speechSelection } from './speech-selection.js';
157
176
 
158
177
  await arcaneThemeReady;
@@ -204,7 +223,7 @@ If your app already has complete segments in an array, let the shared
204
223
  `SpeechPlayback` owner submit them as soon as they are available:
205
224
 
206
225
  ```javascript
207
- import SpeechPlayback from 'arcane/SpeechPlayback';
226
+ import SpeechPlayback from 'arcane-os/speech-playback';
208
227
 
209
228
  const audio = document.body.appendChild(document.createElement('audio'));
210
229
  audio.controls = true;
@@ -239,7 +258,7 @@ the application or prove that a selected provider supports one:
239
258
  import {
240
259
  SPEECH_VOICE_ALIASES,
241
260
  SPEECH_VOICE_OPTIONS
242
- } from 'arcane/SpeechPlayback';
261
+ } from 'arcane-os/speech-playback';
243
262
 
244
263
  console.log(SPEECH_VOICE_OPTIONS[0]); // {value: 'alloy', label: 'Alloy'}
245
264
  console.log(SPEECH_VOICE_ALIASES.has('alloy')); // true
@@ -308,11 +327,13 @@ TWiN Cloud is the SDK's default remote language-model service, identified by
308
327
  `openai-gpt-oss-120b`. Supply the bearer credential through `ai.twinKey` or
309
328
  `globalThis.arcane.config.twinCloud.accessKey`. The established `ai.license`
310
329
  property remains available. Applications should present the service and
311
- credential as **TWiN Cloud** and **TWiN access key**. The TWiN key is used only
312
- for remote LLM chat. Audio stays
313
- on device: Whisper (`LOCAL_SPEACH` / `whisper-small`) owns transcription and
314
- Kokoro (`LOCAL_SPEACH` / `kokoro`) owns speech synthesis. Neither audio route
315
- uses the TWiN key, and neither requires a cloud audio key.
330
+ credential as **TWiN Cloud** and **TWiN access key**. Explicit cloud speech,
331
+ System One and image requests also use application-supplied credentials.
332
+ The built-in local speech selections remain Whisper (`LOCAL_SPEACH` /
333
+ `whisper-small`) for transcription and Kokoro (`LOCAL_SPEACH` / `kokoro`) for
334
+ synthesis. Those local routes use no TWiN key. Applications may separately
335
+ select native browser speech or TWiN Cloud TTS; browser-native services may
336
+ process speech remotely.
316
337
 
317
338
  The built-in provider and default-model preference sentinel are both `TWIN`.
318
339
  Applications upgrading saved preference tuples must replace only uppercase
@@ -334,6 +355,12 @@ Cloud maps it to DigitalOcean Serverless Inference `reasoning_effort`; omitting
334
355
  it preserves the provider default. TWiN Cloud defaults to
335
356
  `openai-gpt-oss-120b`, and applications may explicitly select
336
357
  `openai-gpt-oss-20b` without changing streaming or structural-tool behavior.
358
+ An explicit request `model` selects that call's model without changing saved
359
+ preferences. The stateless `fetchRequest`, `fetchSystemOneRequest` and
360
+ `generateImages` exports in `arcane-os/ai/twin-cloud` require a caller-selected
361
+ model and return the complete documented provider result. They retain no chat
362
+ history. See the [TWiN Cloud guide](docs/reference/ai/twin-cloud.md) for each
363
+ request shape, diagnostic callbacks, cancellation and image-job behavior.
337
364
 
338
365
  ## Browser-local AI
339
366
 
@@ -387,8 +414,9 @@ Capability reports evaluate each
387
414
  app-supplied model as `compatible`, `incompatible`, or `unknown`; the app can
388
415
  render that result without the SDK inventing or filtering its catalog.
389
416
 
390
- `arcane-os/ai/browser-speech` exposes independent Whisper STT and Kokoro TTS
391
- provider factories. The package contains the plain-JavaScript provider and
417
+ `arcane-os/ai/browser-speech` exposes independent Whisper STT, Kokoro TTS,
418
+ native browser recognition, native browser synthesis and TWiN Cloud TTS
419
+ provider factories. The local-model path contains the plain-JavaScript provider and
392
420
  Worker machinery, not speech runtimes, models, voices, or a CDN default. An app
393
421
  must supply each runtime/model selection explicitly. Speech roles
394
422
  load, cancel, unload, fail, and recover independently, so speech failure never
@@ -403,6 +431,16 @@ requested and selected devices through execution status. A selected backend
403
431
  reports successful upstream loading, not physical accelerator use for every
404
432
  operation; model and hardware compatibility remain upstream.
405
433
 
434
+ Native speech requires the browser's actual recognition or synthesis API.
435
+ Voice discovery and preparation are silent; explicit playback owns completion,
436
+ pause, resume, cancellation and release. `provider.setDefaultVoice(voiceURI|null)`
437
+ changes future native preparations while preserving explicit choices and
438
+ already prepared speech. `ai.prepareTTSPlayback(payload,signal)` returns a native
439
+ playback descriptor or real Blob audio; `fetchTTS()` and durable `prepareTTS()` require real
440
+ audio and report native audio-export unavailability. Cloud TTS queues complete
441
+ jobs and preserves original-order playback. See the [speech guide](docs/reference/ai/browser-speech.md)
442
+ for voice catalogs, recognition language and provider-specific limits.
443
+
406
444
  Applications that need faster spoken-response onset can configure the shared
407
445
  TTS stream without taking over synthesis or playback:
408
446
 
@@ -453,12 +491,14 @@ uses the same controller for automatic memory extraction.
453
491
 
454
492
  ## Install
455
493
 
456
- Create a new repository-shaped Arcane application with the exact stable SDK:
494
+ Create a standalone Arcane application from the current stable SDK. The scaffold
495
+ records the selected exact version:
457
496
 
458
497
  ```bash
459
- npx arcane-os@0.12.0 new my-app --path ./my-app --target portable --git
498
+ npx arcane-os@latest new my-app --path ./my-app --target browser --git
460
499
  cd my-app
461
500
  npm install
501
+ # Configure HTTPS as described above, then start source development.
462
502
  npm run dev
463
503
  ```
464
504
 
@@ -466,8 +506,8 @@ To enroll an existing repository, install the exact SDK and initialize only
466
506
  missing Arcane files:
467
507
 
468
508
  ```bash
469
- npm install --save-dev --save-exact arcane-os@0.12.0
470
- npm exec -- arcane init my-app --target portable
509
+ npm install --save-exact arcane-os@latest
510
+ npm exec -- arcane init my-app --target browser
471
511
  ```
472
512
 
473
513
  The npm package is named `arcane-os`. Its primary executable is `arcane`, and
@@ -482,7 +522,7 @@ npm exec -- arcane-os targets
482
522
  No global SDK install or standalone Arcane CLI is required. The application
483
523
  repository's exact npm dependency and lockfile own the CLI and toolchain version.
484
524
 
485
- Use `npx arcane-os@0.12.0` for the initial bootstrap because it names this npm
525
+ Use `npx arcane-os@latest` for the initial bootstrap because it names this npm
486
526
  package explicitly; bare `npx arcane` outside an installed project could resolve
487
527
  a different package. Both installed commands invoke the same headless toolchain.
488
528
  Project-local npm scripts use the SDK pinned by that app's `package-lock.json`,
@@ -498,11 +538,11 @@ tarball install in the app's package manifest and lock:
498
538
  # From the arcane-os-sdk checkout
499
539
  npm ci
500
540
  npm run pack:local
501
- node ./bin/arcane.mjs new local-app --path ../local-app --target portable --git
541
+ node ./bin/arcane.mjs new local-app --path ../local-app --target browser --git
502
542
 
503
543
  # From the generated app repository
504
544
  cd ../local-app
505
- npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.12.0.tgz
545
+ npm install --save-exact "../arcane-os-sdk/arcane-os-<selected-version>.tgz"
506
546
  npm ci
507
547
  ```
508
548
 
@@ -511,7 +551,7 @@ same location. The lockfile retains the selected package dependency while
511
551
  Arcane uses the installed package name and version. Local directory `file:` dependencies are not
512
552
  accepted because npm may install them as links; use a packed `.tgz`. A GitHub
513
553
  runner also needs that tarball at the locked path. After publication, replace
514
- the local declaration with the exact `arcane-os@0.12.0` registry package and
554
+ the local declaration with the selected exact registry version and
515
555
  commit the regenerated lock.
516
556
 
517
557
  Generated repositories use `npm ci --ignore-scripts` in CI. Run dependency
@@ -622,16 +662,11 @@ Portable path validation rejects file/directory prefix conflicts,
622
662
  case-colliding prefix spellings, and Windows device aliases including
623
663
  superscript COM/LPT digits.
624
664
 
625
- The reusable `.github/workflows/release-app.yml` workflow
626
- builds one selected app in a `contents: read` job with no OIDC or attestation
627
- authority. An always-run fresh job downloads the uploaded artifact by immutable
628
- artifact id, checks out only the reusable workflow's selected SDK revision, uses
629
- supported Node 24, and checks the selected app id and complete inventory.
630
- When requested, a third job downloads that same artifact id, independently
631
- repeats those checks against the post-upload outputs, and alone receives narrow
632
- OIDC/attestation permissions. No package manager, dependency resolution, caller
633
- checkout, check, or adapter runs with that authority. An unattested uploaded
634
- artifact remains an ordinary build output.
665
+ Use the public package and bundle commands for the selected app output.
666
+ The checked-in reusable `release-app.yml` workflow still pins an older SDK and
667
+ is outside the current supported release path. See
668
+ [publication scope](docs/publishing.md#reusable-application-release-workflow)
669
+ before selecting a repository release workflow.
635
670
 
636
671
  ## SDK test sets
637
672
 
@@ -654,7 +689,7 @@ package installation, or assertions.
654
689
 
655
690
  ## Current target support
656
691
 
657
- Version `0.12.0` exposes one browser target and five explicitly paired
692
+ The SDK exposes one browser target and five explicitly paired
658
693
  native development targets: a non-runnable portable directory, a
659
694
  Windows x64 unsigned-local-test EXE bundle, Linux x64 and Linux ARM64
660
695
  unsigned-local-test DEBs, and an Android development-signed APK. The
@@ -764,7 +799,8 @@ extraction sequence is tracked in [docs/roadmap.md](https://github.com/TheWizard
764
799
 
765
800
  ## Canonical app descriptor
766
801
 
767
- New apps own `apps/<id>/arcane-app.json` schema 2. It contains publisher,
802
+ New standalone apps own root `arcane-app.json` schema 2; explicitly selected
803
+ multi-app layouts use `apps/<id>/arcane-app.json`. It contains publisher,
768
804
  optional permissions and security declarations, native presentation, optional
769
805
  Core requirements, and target intent, and deterministically projects the schema-1
770
806
  `arcane-package.json` required by the current browser packager. The pinned
@@ -793,6 +829,7 @@ The synchronized Arcane runtime and packager are currently distributed under
793
829
  AGPL-3.0-only. The commercial-license notice does not itself grant proprietary
794
830
  distribution rights. Resolve the applicable Arcane commercial or open-source
795
831
  license before distributing a closed-source app that bundles this runtime. Each
796
- browser release carries `LICENSE`, `COMMERCIAL-LICENSE.md`, and `NOTICE` under
797
- `licenses/arcane-os/`; the notice includes the complete bundled Marked and
798
- QRCode.js MIT terms.
832
+ browser release carries `LICENSE`, `COMMERCIAL-LICENSE.md`, and `NOTICE` at the
833
+ configured SDK package route: `node_modules/<dependency>/` for direct installed
834
+ routes, or `licenses/arcane-os/` for a configured physical runtime layout. The
835
+ notice includes the complete bundled Marked and QRCode.js MIT terms.
@@ -15,6 +15,7 @@ export async function fetchRequest({
15
15
  toolChoice = 'auto',
16
16
  parallelToolCalls,
17
17
  reasoningEffort,
18
+ temperature,
18
19
  signal = null,
19
20
  id = Date.now(),
20
21
  onRequest = function observeTWiNRequest(){},
@@ -48,6 +49,9 @@ export async function fetchRequest({
48
49
  if(reasoningEffort){
49
50
  request.reasoning_effort = reasoningEffort;
50
51
  }
52
+ if(temperature !== undefined){
53
+ request.temperature = temperature;
54
+ }
51
55
 
52
56
  try{
53
57
  await onRequest(
@@ -90,8 +90,8 @@ An external workspace can select `installed-v1` routes directly from its
90
90
  runtime, browser runtime, runtime dependency, and licenses to the configured
91
91
  browser destinations. Direct destinations are the real npm paths. Existing
92
92
  `physical-v1` workspaces, virtual installed routes, and the explicit materializer
93
- remain supported. Root scaffolding selects direct npm routes; the existing
94
- multi-app scaffold retains its physical layout. See [installed-package routes](reference/protocols.md#installed-package-browser-routes)
93
+ remain supported. Root scaffolding selects direct npm routes; an explicitly
94
+ selected multi-app scaffold retains its physical layout. See [installed-package routes](reference/protocols.md#installed-package-browser-routes)
95
95
  for the configuration and npm-alias form.
96
96
 
97
97
  An Arcane OS checkout is an integrated SDK consumer, not the owner
@@ -156,6 +156,9 @@ selected source route and the last successful check when evaluating freshness.
156
156
 
157
157
  The shared dev server uses RIAEvangelist's published `node-http-server` 10.0.0
158
158
  public interface for HTTPS and conditional responses on those selected routes.
159
+ Source files, generated resources and packaged previews use the module's complete
160
+ published MIME map, including PDF, Markdown, audio and video. Unknown file
161
+ extensions use `application/octet-stream`.
159
162
  PEM-backed HTTPS uses Node's `Http2SecureServer` with HTTP/1.1 compatibility;
160
163
  clients negotiate either protocol on the same HTTPS port. The SDK
161
164
  owns source selection and generated representations. By default, source development
@@ -213,8 +216,20 @@ release artifact.
213
216
 
214
217
  ## App and release contract
215
218
 
216
- The first SDK version deliberately preserves Arcane's current repository-shaped
217
- URLs and release schema:
219
+ Standalone applications use their repository root as their app root. The default
220
+ scaffold uses `appsRoot: "."` and direct installed-package SDK routes:
221
+
222
+ ```text
223
+ arcane-app.json
224
+ arcane-package.json
225
+ index.html
226
+ node_modules/arcane-os/
227
+ dist/<id>/index.html
228
+ dist/<id>/node_modules/arcane-os/
229
+ dist/<id>/ARCANE_APP_RELEASE.json
230
+ ```
231
+
232
+ Explicit multi-app and integrated workspaces retain `appsRoot: "apps"`:
218
233
 
219
234
  ```text
220
235
  apps/<id>/arcane-app.json
@@ -236,20 +251,20 @@ release URLs. Preview, verification, bundling, and native browser-content input
236
251
  consume that same selected release root; native executable output remains
237
252
  separate. See the [complete output contract](reference/protocols.md#app-selected-package-output).
238
253
 
239
- Packaging places each selected app file beneath `apps/<id>/` in the release
240
- and preserves every shared route destination. When no selected shared payload
241
- supplies a root `index.html`, the SDK generates one that opens the selected app
242
- entry. Authored document bases, app URLs, relative module imports, and shared
243
- runtime paths therefore resolve through the same layout in
254
+ Packaging keeps standalone app files at the release root and places an explicitly
255
+ nested app beneath `apps/<id>/`. It preserves every shared route destination.
256
+ When selected content supplies no root `index.html`, the SDK generates one that
257
+ opens the selected app entry. Authored document bases, app URLs, relative module
258
+ imports and shared runtime paths therefore resolve through the same layout in
244
259
  source development and packaged delivery. Packaging consumes the saved source
245
260
  and managed import maps; use `arcane import-map` to refresh those maps, or the
246
261
  ordinary `arcane dev` startup that performs that refresh.
247
262
 
248
263
  The release manifest keeps `app.entry` relative to the app directory and records
249
- the package launch URL in `app.start`, such as
250
- `./apps/hello-world/index.html`. Its complete `files` inventory includes the
251
- root `index.html` and the prefixed app files. Packaged browser serving opens
252
- `app.start`; a previously generated flat release without `app.start` retains
264
+ the package launch URL in `app.start`: `./index.html` for a root app with that
265
+ entry, or `./apps/hello-world/index.html` for a nested app. Its complete `files`
266
+ inventory follows the selected layout and includes the root `index.html`.
267
+ Packaged browser serving opens `app.start`; a previously generated flat release without `app.start` retains
253
268
  its `app.entry` launch path.
254
269
 
255
270
  The authored schema-2 descriptor is canonical for new apps and projects an
@@ -271,8 +286,9 @@ same URLs. Existing physical `arcane/` routes retain their behavior.
271
286
  `appsRoot: "."` places one standalone application at the workspace root while
272
287
  retaining its declared ID and app-relative entries. The existing `apps` option
273
288
  keeps multi-app and integrated layouts. Root static hosting consumes the same
274
- npm URLs, managed maps, generated PWA files, and compatibility navigation pages
275
- as SDK development. TWiN's ordinary static host needs no additional server;
289
+ npm URLs, managed maps and generated PWA files as SDK development. It generates
290
+ no nested `apps/<id>/` navigation pages or redirects. TWiN's ordinary static
291
+ host needs no additional server;
276
292
  separate Node API hosts such as Stripe keep their existing server and SDK mail
277
293
  imports. Application location does not change their listeners or configuration.
278
294
 
@@ -400,8 +416,8 @@ paths are withheld from the native provider. The provider copies the complete
400
416
  selected release rather than accepting an unrelated source path. Verification
401
417
  is a separate explicit operation for a selected release artifact.
402
418
 
403
- The SDK `0.9.0` runtime requires Arcane `0.8.12` or newer. Compatibility
404
- is contractual rather than exact-version pinning: the prepared Core must meet
419
+ The current native build contract requires Arcane Core `0.8.12` or newer.
420
+ Compatibility is contractual rather than exact-version pinning: the prepared Core must meet
405
421
  the highest minimum declared by the runtime, selected app, and bundled app
406
422
  dependencies; keep each app's Arcane protocol generation; and provide every
407
423
  declared feature, capability, and method. Missing requirements stop before
@@ -5,6 +5,7 @@ named operations:
5
5
 
6
6
  ```text
7
7
  describe -> doctor -> prepare -> plan -> build -> run
8
+ \-> verify (explicit selection)
8
9
  ```
9
10
 
10
11
  The available browser adapter plans from the selected workspace and schema-1
@@ -24,9 +25,10 @@ output. For example:
24
25
 
25
26
  ```bash
26
27
  # Choose one target when creating each app repository.
27
- npx arcane-os@dev new my-app --path ./my-app --target portable --git
28
+ npx arcane-os@latest new my-app --path ./my-app --target portable --git
28
29
  cd my-app
29
30
  npm install
31
+ npm run import-map
30
32
  npm exec -- arcane native-doctor --target portable --arcane-root "../Arcane OS"
31
33
  npm exec -- arcane build --target portable --arcane-root "../Arcane OS"
32
34
 
@@ -52,7 +54,12 @@ npm exec -- arcane run --target android-arm64 --arcane-root "../Arcane OS" --for
52
54
 
53
55
  Every native scaffold also declares the browser target, so one repository can
54
56
  use the normal browser development loop and its one selected native build. It
55
- includes the raster icon required by the current native platform. Use the
57
+ uses the repository root by default (`appsRoot: "."`) and reads SDK resources
58
+ from its installed npm dependency. After `npm install`, run
59
+ `npm run import-map` before the first package or build so the root app's managed
60
+ browser maps are present. The initial scaffold reports that map as pending while
61
+ the SDK dependency is absent. The scaffold includes the raster icon required
62
+ by the current native platform. Use the
56
63
  matching scaffold target (`portable`, `windows-x64`, `linux-x64`, `linux-arm64`,
57
64
  or `android-arm64`) before running the corresponding command.
58
65
 
@@ -80,6 +87,12 @@ for the complete compatibility and breaking-change rule.
80
87
  | `linux-arm64` | `deb` | Available with explicit `--arcane-root` on a compatible native ARM64 toolchain; unsigned local development only |
81
88
  | `android-arm64` | `apk` | Available with explicit `--arcane-root`; development-signed, architecture-neutral, and physical/native ARM64 for run |
82
89
 
90
+ macOS can consume browser applications and portable JavaScript capabilities
91
+ within their declared runtimes. The current target registry has no macOS native
92
+ package adapter; it exposes only the six targets above. A source-development
93
+ native wrapper is also not an exposed `arcane dev` target. Native `run` uses the
94
+ selected packaged application through its paired provider.
95
+
83
96
  Every native target accepts one selected app release and its complete bundled
84
97
  dependency closure through the provider boundary. The providers retain the
85
98
  toolchain state required for build and, where supported, launch; app source and
@@ -17,15 +17,15 @@ high-level page links to the relevant deep section instead of repeating it.
17
17
  Install the SDK in your application:
18
18
 
19
19
  ```sh
20
- npm install --save-exact arcane-os@0.5.17
20
+ npm install --save-exact arcane-os@latest
21
21
  ```
22
22
 
23
23
  For your first AI call, follow the [TWiN Cloud quick start](ai/twin-cloud.md).
24
- For on-device speech, follow the [browser speech quick start](ai/browser-speech.md)
24
+ For local models, native browser voices or cloud speech, follow the [browser speech guide](ai/browser-speech.md)
25
25
  and the complete [browser AI demo](https://github.com/TheWizardNexus/arcane-os-sdk/tree/main/examples/wasm-ai-demo).
26
26
  Each guide names the application configuration you supply and shows the public
27
27
  call, response, cancellation, and error handling. Browser module imports use
28
- the SDK's [materialized import map](cli.md#arcane-import-map); installing npm
28
+ the SDK's [managed import map](cli.md#arcane-import-map); installing npm
29
29
  alone does not make bare module names resolve in a browser.
30
30
 
31
31
  ## Reference map
@@ -47,8 +47,11 @@ alone does not make bare module names resolve in a browser.
47
47
  | Subscribe to native events | [Arcane event reference](core/arcane-events.md) |
48
48
  | Use provider-neutral AI lifecycle, chat, speech, persistence, or document context | [Normalized AI](#normalized-ai) |
49
49
  | Run a caller-selected local LLM in the browser | [Browser-WASM local AI](ai/browser-wasm.md) |
50
- | Run caller-selected Whisper or Kokoro in the browser | [Browser speech providers](ai/browser-speech.md) |
51
- | Send one TWiN Cloud request or migrate saved LLM preferences | [TWiN Cloud quick start](ai/twin-cloud.md) |
50
+ | Run caller-selected Whisper/Kokoro, native browser recognition/voices or cloud TTS | [Browser speech providers](ai/browser-speech.md) |
51
+ | Send TWiN chat, System One state/questions or image requests | [TWiN Cloud guide](ai/twin-cloud.md) |
52
+ | Edit live transcription before Send, or print a complete conversation | [Chat component](runtime-components.md#chathtml) |
53
+ | Store images outside Markdown and hydrate them in previews | [MarkdownMedia](runtime-modules.md#markdownmediajs) |
54
+ | Print complete rendered documents, previews and conversations | [PrintView](runtime-modules.md#printviewjs) |
52
55
  | Use Arcane Ollama | [Arcane Ollama guide](arcane-ollama.md) |
53
56
  | Understand transports and protocol switching | [Protocol and host architecture](protocols.md) |
54
57
  | Run contract and behavior tests | [Behavioral testing](behavioral-testing.md) |
@@ -59,9 +62,9 @@ This repository contains explicitly versioned surfaces with different owners:
59
62
 
60
63
  | Surface | Source identity | Meaning |
61
64
  | --- | --- | --- |
62
- | SDK and CLI | `arcane-os` `0.5.17` | The Node.js toolchain, portable `arcane-os/event-manager`, `arcane-os/logging`, `arcane-os/mail`, `arcane-os/preference-store`, `arcane-os/speech-playback`, and `arcane-os/speech-text` entrypoints, plus the browser-only `arcane-os/ai/browser-wasm` and `arcane-os/ai/browser-speech` entrypoints in this checkout. |
63
- | Browser runtime | SDK `0.5.17`, protocol `arcane/1`, `runtime/` | The SDK-canonical runtime tree. `listRuntimeFiles()`, `readRuntimeFile()`, and `loadRuntimeRelease()` derive its current inventory directly from the selected directory. |
64
- | Browser SDK runtime | SDK `0.5.17`, `browser-runtime/` | The browser closure for events, shared logging, speech-text cleanup, Wllama, and Browser Speech mechanisms. `listSdkBrowserRuntimeFiles()`, `readSdkBrowserRuntimeFile()`, and `loadSdkBrowserRuntimeRelease()` derive its current inventory directly from the selected directory. |
65
+ | SDK and CLI | `arcane-os`; version in [`package.json`](../../package.json) | The Node.js toolchain and focused public entrypoints listed in the [SDK API](sdk-api.md). Each entrypoint retains its own runtime requirements. |
66
+ | Browser runtime | Selected SDK, protocol `arcane/1`, `runtime/` | The SDK-canonical runtime tree. `listRuntimeFiles()`, `readRuntimeFile()`, and `loadRuntimeRelease()` derive its current inventory directly from the selected directory. |
67
+ | Browser SDK runtime | Selected SDK, `browser-runtime/` | Events, logging, Wllama, local/native/cloud speech, TWiN requests and PWA mechanisms. `listSdkBrowserRuntimeFiles()`, `readSdkBrowserRuntimeFile()`, and `loadSdkBrowserRuntimeRelease()` derive its current inventory directly from the selected directory. |
65
68
  | Core reference snapshot | Arcane OS commit `567ad110bf57a1c2d4a3daa22ae93716cc5f4d7e`, protocol `arcane/1` | The application-facing Core contract imported into `docs/reference/core/`, with SDK-local links and package-boundary notes added explicitly. |
66
69
 
67
70
  The SDK runtime source and Core reference have different owners. A browser
@@ -76,7 +79,9 @@ and the distinction between a documentation snapshot and the selected runtime.
76
79
 
77
80
  ## Installed documentation and release identity
78
81
 
79
- This reference accompanies `arcane-os@0.5.17`. The installed package includes
82
+ The repository reference follows the current committed SDK capabilities. A
83
+ documentation-only repository update can be newer than the text bundled in an
84
+ already published package. The installed package includes
80
85
  the maintained `docs/` tree and `examples/wasm-ai-demo/` source alongside
81
86
  README and CHANGELOG. Open `node_modules/arcane-os/docs/reference/README.md`
82
87
  for the matching local reference. The generated website and test suites remain
@@ -125,28 +130,26 @@ Public reference entries follow the established Arcane documentation model:
125
130
 
126
131
  ## Public runtime inventory
127
132
 
128
- The package exposes 205 semantic JavaScript records across 20 JavaScript
129
- entrypoints, plus eight JSON Schemas and package metadata. Ten entrypoints are
130
- Node.js control-plane surfaces,
131
- `arcane-os/event-manager`, `arcane-os/logging`, `arcane-os/mail`, `arcane-os/preference-store`, and
132
- `arcane-os/speech-playback`, `arcane-os/speech-text`, and `arcane-os/browser-device`
133
- run in Node and browsers, and
134
- `arcane-os/pwa`, `arcane-os/ai/browser-wasm` plus `arcane-os/ai/browser-speech` are browser-only.
135
- The [machine-readable package
136
- inventory](inventory/package-api.json) and [SDK member reference](sdk-api.md)
137
- are checked bidirectionally against every declared JavaScript export.
133
+ The public export map is maintained in [`package.json`](../../package.json).
134
+ It includes Node tooling, focused portable/browser entrypoints, direct runtime
135
+ module and entity patterns, eight JSON Schemas and package metadata. The
136
+ [SDK member reference](sdk-api.md) and [package inventory](inventory/package-api.json)
137
+ describe focused functions; the runtime catalogs document the existing
138
+ namespaces exposed through lowercase aliases and filename-based imports.
139
+ Resolving a package name in Node does not supply browser, media, storage or
140
+ Core capabilities. See the [availability matrix](availability-and-normalization.md).
138
141
 
139
142
  The seven update-check records are explicit on-demand checks; they do not poll,
140
143
  download, install, or self-update.
141
144
 
142
145
  The synchronized browser payload exposes:
143
146
 
144
- - 83 JavaScript module artifacts under `runtime/arcane/modules/`, including
147
+ - JavaScript modules under `runtime/arcane/modules/`, including
145
148
  ESM modules, classic vendor globals, one worker protocol, and one Node-oriented
146
149
  mail transport;
147
- - 14 shared entity modules under `runtime/arcane/entities/`;
148
- - 40 reusable HTML-import components under `runtime/arcane/components/`;
149
- - seven shared CSS artifacts, images, optional physical-workspace security
150
+ - shared entity modules under `runtime/arcane/entities/`;
151
+ - reusable HTML-import components under `runtime/arcane/components/`;
152
+ - shared CSS artifacts, images, optional physical-workspace security
150
153
  files where present, and the vendored `strong-type` dependency.
151
154
 
152
155
  The module and component catalogs enumerate every shipped artifact, including
@@ -165,9 +168,11 @@ Ollama, Wllama, Whisper, Kokoro, native, or cloud transport:
165
168
  | Observe sticky role state and startup settlement | [`AIRuntimeState.js`](runtime-modules.md#airuntimestatejs) | Cross-host EventTarget state; observation grants no authority. |
166
169
  | Offer explicit selected-model start/cancel UI | [`chat.html`](runtime-components.md#chathtml), [`speech.html`](runtime-components.md#speechhtml), and [`voice-transcription.html`](runtime-components.md#voice-transcriptionhtml) | Browser/native WebView components; user activation emits a cancelable request before any LLM or STT load intent, and recording stays disabled without sticky ready STT. |
167
170
  | Use Core-normalized chat | [`globalThis.Arcane.ai`](core/arcane-ai-contracts.md) | Native/Core only when separately admitted. |
168
- | Run a caller-selected GGUF LLM locally | [`arcane-os/ai/browser-wasm`](ai/browser-wasm.md) | Browser secure context with WebGPU full-offload availability, WebAssembly, and OPFS/DBOPFS. |
169
- | Run caller-selected Whisper/Kokoro locally | [`arcane-os/ai/browser-speech`](ai/browser-speech.md) | Browser with DBOPFS, Web Locks, Workers, and caller-supplied runtime and model sources; Kokoro supports bounded Worker/session concurrency with automatic WebGPU-first execution and complete WASM-pool fallback. |
170
- | Add bounded persistent history and memory | [`PersistentAIChatSession.js`](runtime-modules.md#persistentaichatsessionjs) | Browser/native WebView runtime with ChatEntity/DBOPFS and a configured chat function. |
171
+ | Run a caller-selected GGUF LLM locally | [`arcane-os/ai/browser-wasm`](ai/browser-wasm.md) | Browser secure context with WebAssembly and OPFS/DBOPFS; explicit CPU selection or WebGPU with full offload and no automatic CPU fallback. |
172
+ | Run caller-selected Whisper/Kokoro locally | [`arcane-os/ai/browser-speech`](ai/browser-speech.md) | Browser with DBOPFS, Web Locks, Workers and selected upstream sources; automatic WebNN NPU, WebGPU, then WASM loading, or an explicit backend. |
173
+ | Use native browser recognition/voices or selected cloud TTS | [Speech provider choices](ai/browser-speech.md) | Native APIs depend on the browser and may use remote services; cloud TTS requires the application key and endpoint access. |
174
+ | Send complete chat, System One or image requests without retained history | [`arcane-os/ai/twin-cloud`](ai/twin-cloud.md) | Node or browser with Fetch and explicit model/credentials; image results contain every returned image as a Blob. |
175
+ | Add persistent history and memory | [`PersistentAIChatSession.js`](runtime-modules.md#persistentaichatsessionjs) | Browser/native WebView runtime with ChatEntity/DBOPFS and a configured chat function; `persist:false` ends retention when the operation settles. |
171
176
  | Add explicit document search/context | [`DBOPFSDocumentLibrary.js`](runtime-modules.md#dbopfsdocumentlibraryjs) | Existing DBOPFS-style adapter; search occurs only after the app calls it or deliberately wires its context builder into chat. |
172
177
 
173
178
  There is no automatic local-to-cloud, browser-to-Core, provider-to-provider, or