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 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.1` SDK contract. Applications pin one exact npm
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.1 new hello-speech --path ./hello-speech --target browser
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.1 new my-app --path ./my-app --target portable --git
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.1
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.1` for the initial bootstrap because it names this npm
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.1.tgz
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.1` registry package and
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.1` exposes one browser target and five explicitly paired
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
@@ -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.1` runtime requires Arcane `0.8.12` or newer. Compatibility
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
- When WebNN is unavailable, **NPU setup** provides a **Copy NPU flag address**
148
- button and a short enable/relaunch instruction. Chrome uses
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. Only an explicitly
157
- reported integrated or software adapter receives setup guidance on desktop
158
- Windows Chromium browsers. Identified
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.** and hides setup instructions. Explicit integrated or software/fallback
170
+ GPU.** Explicit integrated or software/fallback
170
171
  metadata is reported as such. Missing type metadata shows **GPU available.**
171
- without flag advice and leaves performance selection unconfirmed; a vendor name is not a GPU
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.1"
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. Only explicitly reported integrated/software adapters show flag instructions. 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."
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
- When WebNN is unavailable, Chrome and Edge receive a **Copy NPU flag address**
163
- button for their own browser; unidentified browsers show both choices. Desktop Windows
164
- Chromium browsers receive the matching Force High Performance GPU address only
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.** and hides flag instructions.
193
- An unknown class shows **GPU available.** without recommending flag changes;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-os",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
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",
@@ -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>If you have a discrete GPU, enable “Force High Performance GPU”, save your work, and restart the browser.</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
- ? 'Enable “Enables WebNN API”, save your work, and relaunch the browser.'
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
- const gpuTarget = settings.highPerformanceGpu;
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;