arcane-os 0.11.0 → 0.11.1

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,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.1
4
+
5
+ - Keep the shared Chat transcript, composer, speech controls, language selector,
6
+ and timer hidden until the selected local language model is ready and loaded.
7
+ Cloud routes remain visible immediately, and completed transcripts remain readable.
8
+
3
9
  ## 0.11.0
4
10
 
5
11
  - Add explicit browser chat CPU selection with `loadDefaults:{gpuLayers:0}`
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.0` SDK contract. Applications pin one exact npm
22
+ This checkout defines the `0.11.1` 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.0 new hello-speech --path ./hello-speech --target browser
44
+ npx arcane-os@0.11.1 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.0 new my-app --path ./my-app --target portable --git
395
+ npx arcane-os@0.11.1 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.0
405
+ npm install --save-dev --save-exact arcane-os@0.11.1
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.0` for the initial bootstrap because it names this npm
421
+ Use `npx arcane-os@0.11.1` 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.0.tgz
441
+ npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.11.1.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.0` registry package and
450
+ the local declaration with the exact `arcane-os@0.11.1` 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.0` exposes one browser target and five explicitly paired
589
+ Version `0.11.1` 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
@@ -411,6 +411,18 @@ comes from sticky runtime role state; the method never forwards standalone
411
411
  speech booleans or synthesizes ready speech roles without a selected, loaded
412
412
  provider.
413
413
 
414
+ Before model selection is available, conversation surfaces remain hidden unless
415
+ the host supplies LLM availability through `setAIAvailability()`. For a selected
416
+ local LLM, the transcript, session status, composer, upload, speech panel
417
+ (including application-supplied controls), language selector, and timer stay
418
+ hidden until that exact sticky role is `ready` and `loaded`. The existing model
419
+ activation area remains available for Start, progress, cancellation, and retry.
420
+ A selected cloud route (`localOnly:false`) shows the conversation surfaces
421
+ immediately; Send still follows actual LLM availability. Later unload, failure,
422
+ or selection changes update visibility from the same runtime subscription
423
+ without starting model work or changing retained conversation content. A
424
+ completed conversation keeps its transcript visible and its controls hidden.
425
+
414
426
  When a selected LLM route is `unloaded` or in `error`, the component exposes a
415
427
  keyboard-operable Start/Try again control while Send stays disabled. During
416
428
  `loading`, the control becomes Cancel loading and reflects sticky progress
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-os",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
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",
@@ -112,6 +112,15 @@
112
112
  display:none;
113
113
  }
114
114
 
115
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > .conversation_timebox,
116
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > .chat_output,
117
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > .chat_session_status,
118
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > .chat_input_area,
119
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > #speech,
120
+ .chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) > .controls {
121
+ display: none;
122
+ }
123
+
115
124
  .conversation_timebox[data-error="true"]{
116
125
  color:var(--danger-color,var(--text-color));
117
126
  }
@@ -570,7 +579,7 @@
570
579
  }
571
580
  </style>
572
581
 
573
- <section class="chat_area">
582
+ <section class="chat_area" data-model-start-required="true">
574
583
  <section
575
584
  id="conversation_timebox"
576
585
  class="conversation_timebox"
@@ -1985,6 +1994,14 @@
1985
1994
 
1986
1995
  function applyAIAvailability(availability){
1987
1996
  host.aiAvailability={...availability};
1997
+ const selectedRole = hasSelectedAIRuntimeRole('llm')
1998
+ ? latestAIRuntimeRoles.llm
1999
+ : null;
2000
+ const conversationVisible = selectedRole
2001
+ ? selectedRole.localOnly === false
2002
+ || (selectedRole.state === 'ready' && selectedRole.loaded)
2003
+ : availability.llm;
2004
+ chatArea.dataset.modelStartRequired = String(!conversationVisible);
1988
2005
  send.disabled=host.conversationComplete
1989
2006
  ||!availability.llm
1990
2007
  ||sessionMessagePending