arcane-os 0.7.1 → 0.7.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 +7 -0
- package/README.md +8 -8
- package/docs/architecture.md +1 -1
- package/docs/reference/ai/browser-speech.md +8 -7
- package/docs/reference/inventory/runtime-components.json +2 -2
- package/docs/reference/runtime-components.md +8 -7
- package/package.json +1 -1
- package/runtime/arcane/components/browser-ai-setup.html +4 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
- Keep both supported browser NPU and GPU flag address copy controls available
|
|
6
|
+
regardless of API availability, GPU classification, or detection failure.
|
|
7
|
+
Use one short explanation per flag and one shared paste/enable/relaunch
|
|
8
|
+
instruction. Preserve browser-reported statuses and the GPU-only chat notice.
|
|
9
|
+
|
|
3
10
|
## 0.7.1
|
|
4
11
|
|
|
5
12
|
- Make Profile NPU and GPU setup concise and copy-only, with **Copy NPU flag
|
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.7.
|
|
22
|
+
This checkout defines the `0.7.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
|
|
|
@@ -35,7 +35,7 @@ Create one browser application, install its pinned SDK, and start its source
|
|
|
35
35
|
server:
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npx arcane-os@0.7.
|
|
38
|
+
npx arcane-os@0.7.2 new hello-speech --path ./hello-speech --target browser
|
|
39
39
|
cd hello-speech
|
|
40
40
|
npm install
|
|
41
41
|
npm run dev
|
|
@@ -378,7 +378,7 @@ uses the same controller for automatic memory extraction.
|
|
|
378
378
|
Create a new repository-shaped Arcane application with the exact stable SDK:
|
|
379
379
|
|
|
380
380
|
```bash
|
|
381
|
-
npx arcane-os@0.7.
|
|
381
|
+
npx arcane-os@0.7.2 new my-app --path ./my-app --target portable --git
|
|
382
382
|
cd my-app
|
|
383
383
|
npm install
|
|
384
384
|
npm run dev
|
|
@@ -388,7 +388,7 @@ To enroll an existing repository, install the exact SDK and initialize only
|
|
|
388
388
|
missing Arcane files:
|
|
389
389
|
|
|
390
390
|
```bash
|
|
391
|
-
npm install --save-dev --save-exact arcane-os@0.7.
|
|
391
|
+
npm install --save-dev --save-exact arcane-os@0.7.2
|
|
392
392
|
npm exec -- arcane init my-app --target portable
|
|
393
393
|
```
|
|
394
394
|
|
|
@@ -404,7 +404,7 @@ npm exec -- arcane-os targets
|
|
|
404
404
|
No global SDK install or standalone Arcane CLI is required. The application
|
|
405
405
|
repository's exact npm dependency and lockfile own the CLI and toolchain version.
|
|
406
406
|
|
|
407
|
-
Use `npx arcane-os@0.7.
|
|
407
|
+
Use `npx arcane-os@0.7.2` for the initial bootstrap because it names this npm
|
|
408
408
|
package explicitly; bare `npx arcane` outside an installed project could resolve
|
|
409
409
|
a different package. Both installed commands invoke the same headless toolchain.
|
|
410
410
|
Project-local npm scripts use the SDK pinned by that app's `package-lock.json`,
|
|
@@ -424,7 +424,7 @@ node ./bin/arcane.mjs new local-app --path ../local-app --target portable --git
|
|
|
424
424
|
|
|
425
425
|
# From the generated app repository
|
|
426
426
|
cd ../local-app
|
|
427
|
-
npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.7.
|
|
427
|
+
npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.7.2.tgz
|
|
428
428
|
npm ci
|
|
429
429
|
```
|
|
430
430
|
|
|
@@ -433,7 +433,7 @@ same location. The lockfile retains the selected package dependency while
|
|
|
433
433
|
Arcane uses the installed package name and version. Local directory `file:` dependencies are not
|
|
434
434
|
accepted because npm may install them as links; use a packed `.tgz`. A GitHub
|
|
435
435
|
runner also needs that tarball at the locked path. After publication, replace
|
|
436
|
-
the local declaration with the exact `arcane-os@0.7.
|
|
436
|
+
the local declaration with the exact `arcane-os@0.7.2` registry package and
|
|
437
437
|
commit the regenerated lock.
|
|
438
438
|
|
|
439
439
|
Generated repositories use `npm ci --ignore-scripts` in CI. Run dependency
|
|
@@ -572,7 +572,7 @@ package installation, or assertions.
|
|
|
572
572
|
|
|
573
573
|
## Current target support
|
|
574
574
|
|
|
575
|
-
Version `0.7.
|
|
575
|
+
Version `0.7.2` exposes one browser target and five explicitly paired
|
|
576
576
|
native development targets: a non-runnable portable directory, a
|
|
577
577
|
Windows x64 unsigned-local-test EXE bundle, Linux x64 and Linux ARM64
|
|
578
578
|
unsigned-local-test DEBs, and an Android development-signed APK. The
|
package/docs/architecture.md
CHANGED
|
@@ -279,7 +279,7 @@ paths are withheld from the native provider. The provider copies the complete
|
|
|
279
279
|
selected release rather than accepting an unrelated source path. Verification
|
|
280
280
|
is a separate explicit operation for a selected release artifact.
|
|
281
281
|
|
|
282
|
-
The SDK `0.7.
|
|
282
|
+
The SDK `0.7.2` runtime requires Arcane `0.8.12` or newer. Compatibility
|
|
283
283
|
is contractual rather than exact-version pinning: the prepared Core must meet
|
|
284
284
|
the highest minimum declared by the runtime, selected app, and bundled app
|
|
285
285
|
dependencies; keep each app's Arcane protocol generation; and provide every
|
|
@@ -144,8 +144,8 @@ name. It does not load a model or create a GPU device or WebNN context:
|
|
|
144
144
|
</html-import>
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
**NPU setup** provides a **Copy NPU flag address** button regardless of WebNN
|
|
148
|
+
availability, with one short explanation. Chrome uses
|
|
149
149
|
`chrome://flags/#web-machine-learning-neural-network`; Edge uses
|
|
150
150
|
`edge://flags/#web-machine-learning-neural-network`. Unrecognized browsers
|
|
151
151
|
receive explicit Chrome and Edge choices. A failed copy shows the complete
|
|
@@ -153,9 +153,10 @@ address as selectable text; the component does not open internal browser pages.
|
|
|
153
153
|
The [ONNX Runtime WebNN guide](https://onnxruntime.ai/docs/tutorials/web/ep-webnn.html)
|
|
154
154
|
documents the **Enables WebNN API** flag and model/operator requirements.
|
|
155
155
|
|
|
156
|
-
The **GPU performance** section shows a short adapter status
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
The **GPU performance** section shows a short adapter status and a **Copy GPU
|
|
157
|
+
flag address** button on desktop Windows Chromium browsers. The button remains
|
|
158
|
+
available for every adapter class, unavailable API, or detection failure. One
|
|
159
|
+
shared instruction explains pasting, enabling, saving work, and relaunching. Identified
|
|
159
160
|
Chrome uses `chrome://flags/#force-high-performance-gpu`; other recognized
|
|
160
161
|
Chromium browsers use their corresponding internal scheme. **Refresh**
|
|
161
162
|
requests a new availability result; concurrent
|
|
@@ -166,9 +167,9 @@ settings update. Component readiness does not wait for adapter detection.
|
|
|
166
167
|
Adapter selection uses `powerPreference: "high-performance"` as a hint, not proof
|
|
167
168
|
of the selected GPU's performance or the flag's current state. When the browser
|
|
168
169
|
explicitly reports a discrete GPU, Profile says **Already using the performance
|
|
169
|
-
GPU.**
|
|
170
|
+
GPU.** Explicit integrated or software/fallback
|
|
170
171
|
metadata is reported as such. Missing type metadata shows **GPU available.**
|
|
171
|
-
|
|
172
|
+
and leaves performance selection unconfirmed; a vendor name is not a GPU
|
|
172
173
|
classification. The component cannot read the browser flag or prove that a
|
|
173
174
|
model is executing on the adapter. See the
|
|
174
175
|
[component contract](../runtime-components.md#browser-ai-setuphtml) for result
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"repository": "https://github.com/TheWizardNexus/arcane-os-sdk.git",
|
|
6
6
|
"branch": "main",
|
|
7
7
|
"path": "runtime/arcane/components",
|
|
8
|
-
"sdkVersion": "0.7.
|
|
8
|
+
"sdkVersion": "0.7.2"
|
|
9
9
|
},
|
|
10
10
|
"componentCount": 40,
|
|
11
11
|
"loader": "/arcane/modules/HTMLImport.js",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
],
|
|
99
99
|
"availability": "Browser and supported native WebViews",
|
|
100
100
|
"transport": "HTMLImport + DOM; Clipboard API and WebGPU adapter request. Settings addresses use Copy controls and appear as text if copying fails; open() copies the NPU address without navigation or an alert.",
|
|
101
|
-
"normalization": "API presence, adapter availability, explicit browser GPU class, and copy instructions normalized. A reported discrete GPU shows Already using the performance GPU.
|
|
101
|
+
"normalization": "API presence, adapter availability, explicit browser GPU class, and copy instructions normalized. Supported browser NPU and GPU flag copy controls remain available regardless of API availability, adapter class, or detection failure. A reported discrete GPU shows Already using the performance GPU. Absent type metadata shows GPU available and leaves performance selection unconfirmed. Mounting starts one adapter request; checkGpu() coalesces concurrent calls, while refresh() remains synchronous. No GPU device, model, or WebNN context is created. Adapter metadata does not establish browser flag state, the fastest physical GPU, or another page's model execution."
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"file": "runtime/arcane/components/calculator.html",
|
|
@@ -159,11 +159,13 @@ Slots: `title`, `subtitle`, `identity`, `messages/message`, `composer`, `actions
|
|
|
159
159
|
### Overview
|
|
160
160
|
|
|
161
161
|
Displays a short WebNN availability status and the detected WebGPU adapter.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
when an integrated or software adapter is explicitly reported,
|
|
162
|
+
Chrome and Edge receive a **Copy NPU flag address** button for their own browser;
|
|
163
|
+
unidentified browsers show both choices. Desktop Windows Chromium browsers
|
|
164
|
+
receive a **Copy GPU flag address** button for the matching browser,
|
|
166
165
|
including `chrome://flags/#force-high-performance-gpu` for identified Chrome.
|
|
166
|
+
Both controls remain available regardless of API availability, adapter class,
|
|
167
|
+
or detection failure. Each flag has one short explanation, followed by a shared
|
|
168
|
+
paste, enable, save, and relaunch instruction.
|
|
167
169
|
Settings addresses use Copy controls and appear as selectable text if copying
|
|
168
170
|
fails. The component does not attempt navigation to internal browser pages.
|
|
169
171
|
|
|
@@ -189,9 +191,8 @@ or `null`, `adapterType` as the browser's string or `null`, and
|
|
|
189
191
|
`performanceStatus`: `"discrete"`, `"integrated"`, `"fallback"`, or `"unknown"`.
|
|
190
192
|
Only the explicit browser type or fallback field establishes that status;
|
|
191
193
|
vendor names and the requested power preference do not. A discrete result
|
|
192
|
-
shows **Already using the performance GPU.**
|
|
193
|
-
|
|
194
|
-
performance selection remains unconfirmed in the result. Adapter selection does not
|
|
194
|
+
shows **Already using the performance GPU.** An unknown class shows **GPU available.**
|
|
195
|
+
and leaves performance selection unconfirmed. Adapter selection does not
|
|
195
196
|
prove that a browser flag is enabled, that the fastest GPU was selected, or that
|
|
196
197
|
a model is using it. Failure is displayed and logged, and the promise
|
|
197
198
|
resolves to `false`; destruction also yields `false` and suppresses late UI
|
package/package.json
CHANGED
|
@@ -58,9 +58,10 @@
|
|
|
58
58
|
<p><span id="gpuAvailability" class="arcane-badge gpu-status" role="status" aria-live="polite"></span></p>
|
|
59
59
|
<p id="gpuAdapterName" class="arcane-help"></p>
|
|
60
60
|
<div id="gpuSetup" hidden>
|
|
61
|
-
<p
|
|
61
|
+
<p>“Force High Performance GPU” prefers your faster GPU.</p>
|
|
62
62
|
<button id="copyGpuAddress" class="arcane-button arcane-button--secondary" type="button">Copy GPU flag address</button>
|
|
63
63
|
</div>
|
|
64
|
+
<p>Paste a copied address into your browser's address bar. Enable the flag, save your work, and relaunch.</p>
|
|
64
65
|
<details>
|
|
65
66
|
<summary>Setup help</summary>
|
|
66
67
|
<p><a href="https://onnxruntime.ai/docs/tutorials/web/ep-webnn.html">WebNN setup documentation</a></p>
|
|
@@ -101,7 +102,6 @@
|
|
|
101
102
|
let copyTask=null;
|
|
102
103
|
let copyingAddress = null;
|
|
103
104
|
let gpuTask=null;
|
|
104
|
-
let gpuResult = null;
|
|
105
105
|
let destroyed=false;
|
|
106
106
|
|
|
107
107
|
host.refresh=refresh;
|
|
@@ -115,10 +115,9 @@
|
|
|
115
115
|
root.querySelector('#webnnAvailability').textContent = settings.webnnAvailable
|
|
116
116
|
? 'WebNN available.'
|
|
117
117
|
: 'WebNN unavailable.';
|
|
118
|
-
root.querySelector('#npuSetup').hidden = settings.webnnAvailable;
|
|
119
118
|
const unknownBrowser = settings.browserId === 'unknown';
|
|
120
119
|
root.querySelector('#browserInstructions').textContent = settings.webnnFlagsURL || unknownBrowser
|
|
121
|
-
? '
|
|
120
|
+
? '“Enables WebNN API” allows NPU use when supported.'
|
|
122
121
|
: 'See Setup help for this browser.';
|
|
123
122
|
for (const choice of choices) {
|
|
124
123
|
choice.row.hidden = !unknownBrowser && choice.target.url !== settings.webnnFlagsURL;
|
|
@@ -129,12 +128,7 @@
|
|
|
129
128
|
}
|
|
130
129
|
|
|
131
130
|
function renderGpuGuidance(settings = getBrowserDeviceSettings()) {
|
|
132
|
-
|
|
133
|
-
const nonperformance = gpuResult?.available && (
|
|
134
|
-
gpuResult.performanceStatus === 'integrated'
|
|
135
|
-
|| gpuResult.performanceStatus === 'fallback'
|
|
136
|
-
);
|
|
137
|
-
root.querySelector('#gpuSetup').hidden = !nonperformance || !gpuTarget;
|
|
131
|
+
root.querySelector('#gpuSetup').hidden = !settings.highPerformanceGpu;
|
|
138
132
|
}
|
|
139
133
|
|
|
140
134
|
function checkGpu() {
|
|
@@ -156,7 +150,6 @@
|
|
|
156
150
|
try {
|
|
157
151
|
const result = await detectBrowserGpu();
|
|
158
152
|
if (destroyed) return false;
|
|
159
|
-
gpuResult = result;
|
|
160
153
|
if (!result.available) {
|
|
161
154
|
gpuAvailability.textContent = 'GPU unavailable.';
|
|
162
155
|
gpuAvailability.dataset.status = 'warning';
|
|
@@ -174,14 +167,11 @@
|
|
|
174
167
|
gpuAvailability.dataset.status = 'unknown';
|
|
175
168
|
}
|
|
176
169
|
gpuAdapterName.textContent = result.available ? result.name : '';
|
|
177
|
-
renderGpuGuidance();
|
|
178
170
|
return result;
|
|
179
171
|
} catch (error) {
|
|
180
172
|
if (!destroyed) {
|
|
181
|
-
gpuResult = null;
|
|
182
173
|
gpuAvailability.textContent = 'GPU detection failed. Select Refresh to retry.';
|
|
183
174
|
gpuAvailability.dataset.status = 'error';
|
|
184
|
-
renderGpuGuidance();
|
|
185
175
|
arcaneLogging.error('Unable to detect the browser GPU adapter.', error);
|
|
186
176
|
}
|
|
187
177
|
return false;
|