arcane-os 0.11.1 → 0.11.3

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,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.3
4
+
5
+ - Require Wllama's model-context load result to report success before publishing
6
+ model readiness. Failed initialization now follows the existing cleanup and
7
+ error path instead of allowing conversation requests against a failed context.
8
+ Preserve CPU and GPU selection, cached models, complete payloads, and cancellation.
9
+
10
+ ## 0.11.2
11
+
12
+ - Show mobile speech feedback only during requested or active voice loading.
13
+ Align pending local-model activation to the top of the chat area at viewport
14
+ widths up to `44rem`. Preserve existing mobile controls, complete status and
15
+ error data, desktop layout, and model lifecycle.
16
+
3
17
  ## 0.11.1
4
18
 
5
19
  - Keep the shared Chat transcript, composer, speech controls, language selector,
package/README.md CHANGED
@@ -19,7 +19,7 @@ version-locked SDK runtime, while an integrated Arcane checkout uses its live
19
19
  `arcane/` runtime. Both profiles preserve the same app URLs, theme, packaging,
20
20
  event, cancellation, and browser run contracts.
21
21
 
22
- This checkout defines the `0.11.1` SDK contract. Applications pin one exact npm
22
+ This checkout defines the `0.11.3` SDK contract. Applications pin one exact npm
23
23
  version and lockfile; registry state is deliberately not baked into application
24
24
  artifacts.
25
25
 
@@ -41,7 +41,7 @@ Create one browser application, install its pinned SDK, and start its source
41
41
  server:
42
42
 
43
43
  ```bash
44
- npx arcane-os@0.11.1 new hello-speech --path ./hello-speech --target browser
44
+ npx arcane-os@0.11.3 new hello-speech --path ./hello-speech --target browser
45
45
  cd hello-speech
46
46
  npm install
47
47
  npm run dev
@@ -392,7 +392,7 @@ uses the same controller for automatic memory extraction.
392
392
  Create a new repository-shaped Arcane application with the exact stable SDK:
393
393
 
394
394
  ```bash
395
- npx arcane-os@0.11.1 new my-app --path ./my-app --target portable --git
395
+ npx arcane-os@0.11.3 new my-app --path ./my-app --target portable --git
396
396
  cd my-app
397
397
  npm install
398
398
  npm run dev
@@ -402,7 +402,7 @@ To enroll an existing repository, install the exact SDK and initialize only
402
402
  missing Arcane files:
403
403
 
404
404
  ```bash
405
- npm install --save-dev --save-exact arcane-os@0.11.1
405
+ npm install --save-dev --save-exact arcane-os@0.11.3
406
406
  npm exec -- arcane init my-app --target portable
407
407
  ```
408
408
 
@@ -418,7 +418,7 @@ npm exec -- arcane-os targets
418
418
  No global SDK install or standalone Arcane CLI is required. The application
419
419
  repository's exact npm dependency and lockfile own the CLI and toolchain version.
420
420
 
421
- Use `npx arcane-os@0.11.1` for the initial bootstrap because it names this npm
421
+ Use `npx arcane-os@0.11.3` for the initial bootstrap because it names this npm
422
422
  package explicitly; bare `npx arcane` outside an installed project could resolve
423
423
  a different package. Both installed commands invoke the same headless toolchain.
424
424
  Project-local npm scripts use the SDK pinned by that app's `package-lock.json`,
@@ -438,7 +438,7 @@ node ./bin/arcane.mjs new local-app --path ../local-app --target portable --git
438
438
 
439
439
  # From the generated app repository
440
440
  cd ../local-app
441
- npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.11.1.tgz
441
+ npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.11.3.tgz
442
442
  npm ci
443
443
  ```
444
444
 
@@ -447,7 +447,7 @@ same location. The lockfile retains the selected package dependency while
447
447
  Arcane uses the installed package name and version. Local directory `file:` dependencies are not
448
448
  accepted because npm may install them as links; use a packed `.tgz`. A GitHub
449
449
  runner also needs that tarball at the locked path. After publication, replace
450
- the local declaration with the exact `arcane-os@0.11.1` registry package and
450
+ the local declaration with the exact `arcane-os@0.11.3` registry package and
451
451
  commit the regenerated lock.
452
452
 
453
453
  Generated repositories use `npm ci --ignore-scripts` in CI. Run dependency
@@ -586,7 +586,7 @@ package installation, or assertions.
586
586
 
587
587
  ## Current target support
588
588
 
589
- Version `0.11.1` exposes one browser target and five explicitly paired
589
+ Version `0.11.3` exposes one browser target and five explicitly paired
590
590
  native development targets: a non-runnable portable directory, a
591
591
  Windows x64 unsigned-local-test EXE bundle, Linux x64 and Linux ARM64
592
592
  unsigned-local-test DEBs, and an Android development-signed APK. The
@@ -575,6 +575,13 @@ export function createPackagedWllamaRuntime({ logger = arcaneLogging } = {}) {
575
575
  "Wllama did not confirm a successfully loaded model.",
576
576
  );
577
577
  }
578
+ const loadedContext = next.getLoadedContextInfo();
579
+ if (loadedContext.success !== true) {
580
+ throw runtimeFailure(
581
+ 'ARCANE_AI_LOAD_FAILED',
582
+ 'Wllama failed to create the model context.'
583
+ );
584
+ }
578
585
  let adapter = null;
579
586
  if (webgpuRequired) {
580
587
  const telemetryOperation = trackOperation(
@@ -146,8 +146,11 @@ bar is indeterminate. Downloaded-file completion is not activation completion.
146
146
  The metadata tensor count and GPU layer assignment are descriptive only:
147
147
  upstream reports assigned layers before model-weight loading has finished.
148
148
  The pinned runtime does not expose a measured overall initialization fraction
149
- or a shader-compilation completion count. Readiness still requires the load
150
- operation to resolve and the runtime to confirm the model is loaded.
149
+ or a shader-compilation completion count. Readiness requires the load operation
150
+ to resolve, Wllama to report the model loaded, and its public
151
+ `getLoadedContextInfo()` result to report `success:true`. A failed model context
152
+ rejects loading with `ARCANE_AI_LOAD_FAILED`, releases the owned session, and
153
+ leaves the provider in `error` with `loaded:false` before inference can begin.
151
154
 
152
155
  While a load remains active, the provider repeats its current record every five
153
156
  seconds with `heartbeat:true` and an updated `elapsedMs`. During initialization,
@@ -417,6 +417,8 @@ local LLM, the transcript, session status, composer, upload, speech panel
417
417
  (including application-supplied controls), language selector, and timer stay
418
418
  hidden until that exact sticky role is `ready` and `loaded`. The existing model
419
419
  activation area remains available for Start, progress, cancellation, and retry.
420
+ At viewport widths up to `44rem`, that pending local-model activation area sits
421
+ at the top of the chat area; wider layouts retain their existing placement.
420
422
  A selected cloud route (`localOnly:false`) shows the conversation surfaces
421
423
  immediately; Send still follows actual LLM availability. Later unload, failure,
422
424
  or selection changes update visibility from the same runtime subscription
@@ -1180,8 +1182,12 @@ selects a Speech interface for voice output. Transcription activation,
1180
1182
  recording, sending recorded audio, and their status/progress are unavailable;
1181
1183
  `requestSTTActivation()` returns `false` without requesting a provider action.
1182
1184
  The keyboard remains the voice-input path. The existing TTS mute/unmute control
1183
- and voice status remain available, and Chat retains its End control. Desktop
1184
- speech and the dedicated `voice-transcription.html` component retain their
1185
+ remains available alongside application-supplied controls such as End. Mobile
1186
+ voice feedback participates in layout only while a voice load is requested or
1187
+ the TTS role is `loading`; it collapses in other states, including unloaded, ready, and
1188
+ speaking. Complete status text and error events remain maintained by the same
1189
+ owner, and the voice control retains its state-specific labels and retry action.
1190
+ Desktop speech and the dedicated `voice-transcription.html` component retain their
1185
1191
  existing behavior.
1186
1192
 
1187
1193
  On desktop, the Hold to talk control remains disabled unless sticky STT state
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-os",
3
- "version": "0.11.1",
3
+ "version": "0.11.3",
4
4
  "description": "Arcane OS JavaScript SDK, project-local CLI, browser runtime, and repository-portable application packager.",
5
5
  "type": "module",
6
6
  "main": "./src/index.mjs",
@@ -531,6 +531,10 @@
531
531
  padding: var(--arcane-space-2, .5rem);
532
532
  }
533
533
 
534
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) {
535
+ justify-content: flex-start;
536
+ }
537
+
534
538
  .chat_output > li {
535
539
  max-width: 96%;
536
540
  }
@@ -147,6 +147,10 @@
147
147
  grid-column: 1;
148
148
  }
149
149
 
150
+ :host([data-device-class="mobile"]:not([data-voice-loading="true"])) .speech_feedback {
151
+ display: none;
152
+ }
153
+
150
154
  :host([data-device-class="mobile"]) #muteButton {
151
155
  grid-row: 1;
152
156
  grid-column: 2;
@@ -725,6 +729,9 @@
725
729
  }
726
730
 
727
731
  function renderStatus() {
732
+ host.dataset.voiceLoading = String(
733
+ pendingTTSIntent === 'load' || ttsRole.state === 'loading'
734
+ );
728
735
  const messages = [];
729
736
  let tone = '';
730
737