arcane-os 0.11.0 → 0.11.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,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.2
|
|
4
|
+
|
|
5
|
+
- Show mobile speech feedback only during requested or active voice loading.
|
|
6
|
+
Align pending local-model activation to the top of the chat area at viewport
|
|
7
|
+
widths up to `44rem`. Preserve existing mobile controls, complete status and
|
|
8
|
+
error data, desktop layout, and model lifecycle.
|
|
9
|
+
|
|
10
|
+
## 0.11.1
|
|
11
|
+
|
|
12
|
+
- Keep the shared Chat transcript, composer, speech controls, language selector,
|
|
13
|
+
and timer hidden until the selected local language model is ready and loaded.
|
|
14
|
+
Cloud routes remain visible immediately, and completed transcripts remain readable.
|
|
15
|
+
|
|
3
16
|
## 0.11.0
|
|
4
17
|
|
|
5
18
|
- 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.
|
|
22
|
+
This checkout defines the `0.11.2` 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.
|
|
44
|
+
npx arcane-os@0.11.2 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.
|
|
395
|
+
npx arcane-os@0.11.2 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.
|
|
405
|
+
npm install --save-dev --save-exact arcane-os@0.11.2
|
|
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.
|
|
421
|
+
Use `npx arcane-os@0.11.2` 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.
|
|
441
|
+
npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.11.2.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.
|
|
450
|
+
the local declaration with the exact `arcane-os@0.11.2` 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.
|
|
589
|
+
Version `0.11.2` 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,20 @@ 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
|
+
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.
|
|
422
|
+
A selected cloud route (`localOnly:false`) shows the conversation surfaces
|
|
423
|
+
immediately; Send still follows actual LLM availability. Later unload, failure,
|
|
424
|
+
or selection changes update visibility from the same runtime subscription
|
|
425
|
+
without starting model work or changing retained conversation content. A
|
|
426
|
+
completed conversation keeps its transcript visible and its controls hidden.
|
|
427
|
+
|
|
414
428
|
When a selected LLM route is `unloaded` or in `error`, the component exposes a
|
|
415
429
|
keyboard-operable Start/Try again control while Send stays disabled. During
|
|
416
430
|
`loading`, the control becomes Cancel loading and reflects sticky progress
|
|
@@ -1168,8 +1182,12 @@ selects a Speech interface for voice output. Transcription activation,
|
|
|
1168
1182
|
recording, sending recorded audio, and their status/progress are unavailable;
|
|
1169
1183
|
`requestSTTActivation()` returns `false` without requesting a provider action.
|
|
1170
1184
|
The keyboard remains the voice-input path. The existing TTS mute/unmute control
|
|
1171
|
-
|
|
1172
|
-
|
|
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
|
|
1173
1191
|
existing behavior.
|
|
1174
1192
|
|
|
1175
1193
|
On desktop, the Hold to talk control remains disabled unless sticky STT state
|
package/package.json
CHANGED
|
@@ -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
|
}
|
|
@@ -522,6 +531,10 @@
|
|
|
522
531
|
padding: var(--arcane-space-2, .5rem);
|
|
523
532
|
}
|
|
524
533
|
|
|
534
|
+
.chat_area[data-model-start-required="true"]:not([data-conversation-complete="true"]) {
|
|
535
|
+
justify-content: flex-start;
|
|
536
|
+
}
|
|
537
|
+
|
|
525
538
|
.chat_output > li {
|
|
526
539
|
max-width: 96%;
|
|
527
540
|
}
|
|
@@ -570,7 +583,7 @@
|
|
|
570
583
|
}
|
|
571
584
|
</style>
|
|
572
585
|
|
|
573
|
-
<section class="chat_area">
|
|
586
|
+
<section class="chat_area" data-model-start-required="true">
|
|
574
587
|
<section
|
|
575
588
|
id="conversation_timebox"
|
|
576
589
|
class="conversation_timebox"
|
|
@@ -1985,6 +1998,14 @@
|
|
|
1985
1998
|
|
|
1986
1999
|
function applyAIAvailability(availability){
|
|
1987
2000
|
host.aiAvailability={...availability};
|
|
2001
|
+
const selectedRole = hasSelectedAIRuntimeRole('llm')
|
|
2002
|
+
? latestAIRuntimeRoles.llm
|
|
2003
|
+
: null;
|
|
2004
|
+
const conversationVisible = selectedRole
|
|
2005
|
+
? selectedRole.localOnly === false
|
|
2006
|
+
|| (selectedRole.state === 'ready' && selectedRole.loaded)
|
|
2007
|
+
: availability.llm;
|
|
2008
|
+
chatArea.dataset.modelStartRequired = String(!conversationVisible);
|
|
1988
2009
|
send.disabled=host.conversationComplete
|
|
1989
2010
|
||!availability.llm
|
|
1990
2011
|
||sessionMessagePending
|
|
@@ -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
|
|