arcane-os 0.2.2 → 0.2.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 +12 -0
- package/README.md +8 -8
- package/browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json +1 -1
- package/docs/architecture.md +2 -2
- package/docs/reference/README.md +24 -24
- package/docs/reference/ai/browser-speech.md +1 -1
- package/docs/reference/ai/browser-wasm.md +1 -1
- package/docs/reference/availability-and-normalization.md +6 -3
- package/docs/reference/behavioral-testing.md +1 -1
- package/docs/reference/cli.md +3 -3
- package/docs/reference/core/arcane-ai-contracts.md +1 -1
- package/docs/reference/inventory/package-api.json +1 -1
- package/docs/reference/inventory/runtime-components.json +25 -10
- package/docs/reference/inventory/runtime-modules.json +8 -7
- package/docs/reference/protocols.md +27 -23
- package/docs/reference/runtime-components.md +70 -7
- package/docs/reference/runtime-modules.md +33 -11
- package/docs/reference/sdk-api.md +8 -8
- package/package.json +1 -1
- package/runtime/ARCANE_RUNTIME_RELEASE.json +9 -9
- package/runtime/arcane/components/speech.html +9 -253
- package/runtime/arcane/components/voice-transcription.html +437 -68
- package/runtime/arcane/modules/ComponentContracts.js +272 -0
- package/schemas/arcane-lock.schema.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.3
|
|
4
|
+
|
|
5
|
+
- Made shared voice transcription consume authoritative sticky STT state,
|
|
6
|
+
expose explicit selected-unloaded activation, and keep recording disabled
|
|
7
|
+
until the selected route is genuinely ready and non-busy.
|
|
8
|
+
- Added owned cancellation and current-operation guards across microphone
|
|
9
|
+
permission, recording, transcription, save, completion, transcript
|
|
10
|
+
replacement, synchronous public events, teardown, and stale settlement.
|
|
11
|
+
- Centralized the shared STT activation control in
|
|
12
|
+
`createSTTActivationController()` without automatic downloads, hidden
|
|
13
|
+
provider selection, or application policy.
|
|
14
|
+
|
|
3
15
|
## 0.2.2
|
|
4
16
|
|
|
5
17
|
- Corrected latest-request-wins ownership so each newly admitted AI request
|
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.2.
|
|
22
|
+
This checkout defines the `0.2.3` SDK contract. Applications pin one exact npm
|
|
23
23
|
version and lockfile; registry state is deliberately not baked into immutable
|
|
24
24
|
application artifacts.
|
|
25
25
|
|
|
@@ -132,7 +132,7 @@ uses the same controller for automatic memory extraction.
|
|
|
132
132
|
Create a new repository-shaped Arcane application with the exact stable SDK:
|
|
133
133
|
|
|
134
134
|
```bash
|
|
135
|
-
npx arcane-os@0.2.
|
|
135
|
+
npx arcane-os@0.2.3 new my-app --path ./my-app --target portable --git
|
|
136
136
|
cd my-app
|
|
137
137
|
npm install
|
|
138
138
|
npm run check
|
|
@@ -143,7 +143,7 @@ To enroll an existing repository, install the exact SDK and initialize only
|
|
|
143
143
|
missing Arcane files:
|
|
144
144
|
|
|
145
145
|
```bash
|
|
146
|
-
npm install --save-dev --save-exact arcane-os@0.2.
|
|
146
|
+
npm install --save-dev --save-exact arcane-os@0.2.3
|
|
147
147
|
npm exec -- arcane init my-app --target portable
|
|
148
148
|
```
|
|
149
149
|
|
|
@@ -159,7 +159,7 @@ npm exec -- arcane-os targets
|
|
|
159
159
|
No global SDK install or standalone Arcane CLI is required. The application
|
|
160
160
|
repository's exact npm dependency and lockfile own the CLI and toolchain version.
|
|
161
161
|
|
|
162
|
-
Use `npx arcane-os@0.2.
|
|
162
|
+
Use `npx arcane-os@0.2.3` for the initial bootstrap because it names this npm
|
|
163
163
|
package explicitly; bare `npx arcane` outside an installed project could resolve
|
|
164
164
|
a different package. Both installed commands invoke the same headless toolchain.
|
|
165
165
|
Project-local npm scripts use the SDK pinned by that app's `package-lock.json`,
|
|
@@ -180,7 +180,7 @@ node ./bin/arcane.mjs new local-app --path ../local-app --target portable --git
|
|
|
180
180
|
|
|
181
181
|
# From the generated app repository
|
|
182
182
|
cd ../local-app
|
|
183
|
-
npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.2.
|
|
183
|
+
npm install --save-dev --save-exact ../arcane-os-sdk/arcane-os-0.2.3.tgz
|
|
184
184
|
npm run check
|
|
185
185
|
npm ci
|
|
186
186
|
```
|
|
@@ -191,7 +191,7 @@ still verifies the installed package name and exact version, the locked runtime
|
|
|
191
191
|
identity, and the runtime bytes. Local directory `file:` dependencies are not
|
|
192
192
|
accepted because npm may install them as links; use a packed `.tgz`. A GitHub
|
|
193
193
|
runner also needs that tarball at the locked path. After publication, replace
|
|
194
|
-
the local declaration with the exact `arcane-os@0.2.
|
|
194
|
+
the local declaration with the exact `arcane-os@0.2.3` registry package and
|
|
195
195
|
commit the regenerated lock.
|
|
196
196
|
|
|
197
197
|
Generated repositories use `npm ci --ignore-scripts` in CI. Run dependency
|
|
@@ -304,7 +304,7 @@ recorded length through a final identity check; an appended byte, concurrent
|
|
|
304
304
|
growth, path replacement, or hard link fails closed. NFC paths use defined
|
|
305
305
|
UTF-8 byte ordering, covered by one pinned golden bundle digest on every
|
|
306
306
|
supported Node/runner combination. This SDK accepts only the explicitly listed
|
|
307
|
-
`0.2.
|
|
307
|
+
`0.2.3` bundle generation; structural validity does not imply cross-SDK
|
|
308
308
|
compatibility, and a release with zero payload bytes cannot be created. Portable
|
|
309
309
|
path validation rejects file/directory prefix conflicts, case-colliding prefix
|
|
310
310
|
spellings, and Windows device aliases including superscript COM/LPT digits.
|
|
@@ -350,7 +350,7 @@ package installation, or assertions.
|
|
|
350
350
|
|
|
351
351
|
## Current target support
|
|
352
352
|
|
|
353
|
-
Version `0.2.
|
|
353
|
+
Version `0.2.3` exposes one browser target and five explicitly paired
|
|
354
354
|
native development targets: a verified non-runnable portable directory, a
|
|
355
355
|
Windows x64 unsigned-local-test EXE bundle, Linux x64 and Linux ARM64
|
|
356
356
|
unsigned-local-test DEBs, and an Android development-signed APK. The
|
package/docs/architecture.md
CHANGED
|
@@ -200,7 +200,7 @@ length with an EOF growth probe, and rechecked by handle and pathname identity.
|
|
|
200
200
|
Every cumulative path prefix has one case-folded spelling and one file/directory
|
|
201
201
|
kind; prefix topology conflicts and the complete portable Windows device-name
|
|
202
202
|
set fail before creation or admission.
|
|
203
|
-
The current SDK admits only the explicitly compatible `0.2.
|
|
203
|
+
The current SDK admits only the explicitly compatible `0.2.3` bundle
|
|
204
204
|
generation and rejects zero-byte payload releases.
|
|
205
205
|
|
|
206
206
|
Promotion retains any prior output as an identity-bound backup until the new
|
|
@@ -320,7 +320,7 @@ through SDK-bound verified readers rather than accepting a mutable source path
|
|
|
320
320
|
as authority. Build completion requires provider verification, and later
|
|
321
321
|
verify/run calls receive the exact artifact receipt.
|
|
322
322
|
|
|
323
|
-
The SDK `0.2.
|
|
323
|
+
The SDK `0.2.3` runtime requires Arcane `0.8.12` or newer. Compatibility
|
|
324
324
|
is contractual rather than exact-version pinning: the prepared Core must meet
|
|
325
325
|
the highest minimum declared by the runtime, selected app, and bundled app
|
|
326
326
|
dependencies; keep each app's Arcane protocol generation; and provide every
|
package/docs/reference/README.md
CHANGED
|
@@ -39,9 +39,9 @@ This repository contains explicitly versioned surfaces with different owners:
|
|
|
39
39
|
|
|
40
40
|
| Surface | Source identity | Meaning |
|
|
41
41
|
| --- | --- | --- |
|
|
42
|
-
| SDK and CLI | `arcane-os` `0.2.
|
|
43
|
-
| Browser runtime | SDK source commit `
|
|
44
|
-
| Browser SDK runtime | SDK source commit `
|
|
42
|
+
| SDK and CLI | `arcane-os` `0.2.3` | The Node.js toolchain plus the browser-only `arcane-os/ai/browser-wasm` and `arcane-os/ai/browser-speech` entrypoints in this checkout. |
|
|
43
|
+
| Browser runtime | SDK source commit `f97ac4f2e7cc92a00a3a466c38a67446dd112acf`, SDK `0.2.3`, protocol `arcane/1` | The SDK-canonical exact 160-file runtime shipped under `runtime/`; Arcane OS commit `c540014afe69f14cf5ae60493b7295f36dbcec64` is legacy projection provenance, not a second source authority. |
|
|
44
|
+
| Browser SDK runtime | SDK source commit `f97ac4f2e7cc92a00a3a466c38a67446dd112acf`, SDK `0.2.3` | The exact 25-file authenticated browser closure: EventManager/DOM instrumentation and pinned event dependencies, Wllama runtime assets, and SDK browser speech provider/store/Worker mechanisms. It contains no model weights or speech adapter/model bytes. |
|
|
45
45
|
| Core reference snapshot | Arcane OS commit `567ad110bf57a1c2d4a3daa22ae93716cc5f4d7e`, protocol `arcane/1` | The application-facing Core contract derived into `docs/reference/core/`. Canonical inventory and focused-member content was verified unchanged at Arcane OS `main` commit `13f3ce0ae34f77a3495331c8b4c30b1bb105f8ed`; SDK-local provenance, link, and package-boundary annotations are added explicitly. |
|
|
46
46
|
|
|
47
47
|
The SDK runtime receipt and Core reference are distinct evidence and have
|
|
@@ -58,26 +58,25 @@ See [Core reference provenance](core/README.md) for the imported inventory and
|
|
|
58
58
|
the exact distinction between a documentation snapshot and shipped runtime
|
|
59
59
|
bytes.
|
|
60
60
|
|
|
61
|
-
## Published 0.2.
|
|
61
|
+
## Published 0.2.2
|
|
62
62
|
|
|
63
|
-
The published package is exactly `arcane-os@0.2.
|
|
64
|
-
`
|
|
65
|
-
to `0.2.
|
|
63
|
+
The published package is exactly `arcane-os@0.2.2` from source commit
|
|
64
|
+
`d5326d206bf0bec6ad82d53605e666841aa79899`. The npm `latest` dist-tag resolves
|
|
65
|
+
to `0.2.2`; the separate `dev` dist-tag remains `0.1.0-dev.5`.
|
|
66
66
|
|
|
67
|
-
The
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
relying on them.
|
|
67
|
+
The admission-aware `voice-transcription.html` lifecycle and shared
|
|
68
|
+
`createSTTActivationController()` contract documented below are newer canonical
|
|
69
|
+
source. They are not package authority in `0.2.2`; consumers require a fresh
|
|
70
|
+
numeric publication before relying on them.
|
|
72
71
|
|
|
73
72
|
| Evidence | Exact value |
|
|
74
73
|
| --- | --- |
|
|
75
|
-
| npm integrity | `sha512-
|
|
76
|
-
| npm shasum | `
|
|
77
|
-
| Immutable release tarball | `arcane-os-0.2.
|
|
78
|
-
| GitHub release | [`0.2.
|
|
79
|
-
| Hosted source/artifact gate | [Check run
|
|
80
|
-
| Trusted publication | [Run
|
|
74
|
+
| npm integrity | `sha512-JnLzZ4+FqX9tMgRv8HMcaCPSFx3xNNRf8BF8T03fD2ymg2g8cIGZRdD/3Tbd9PLtpx1PIKCpxz6nCP6ztnu1Nw==` |
|
|
75
|
+
| npm shasum | `0b0d314acce48dcb5518470cd45a54221589d4d4` |
|
|
76
|
+
| Immutable release tarball | `arcane-os-0.2.2.manifest.json`; artifact `9631659213`; 6,993,999 bytes; SHA-256 `e0fe1a556b603f67f5e3c142be7154b433312d3c0f3b58632df2e7fc43cc0ca7` |
|
|
77
|
+
| GitHub release | [`0.2.2`](https://github.com/TheWizardNexus/arcane-os-sdk/releases/tag/0.2.2) (tag and title are both exactly `0.2.2`) |
|
|
78
|
+
| Hosted source/artifact gate | [Check run 33034955277](https://github.com/TheWizardNexus/arcane-os-sdk/actions/runs/33034955277) |
|
|
79
|
+
| Trusted publication | [Run 33035086265](https://github.com/TheWizardNexus/arcane-os-sdk/actions/runs/33035086265) |
|
|
81
80
|
|
|
82
81
|
The npm SLSA provenance binds the published package to that exact source commit
|
|
83
82
|
and `.github/workflows/publish-dev.yml`. Hashes prove byte identity or
|
|
@@ -139,7 +138,7 @@ Ollama, Wllama, Whisper, Kokoro, native, or cloud transport:
|
|
|
139
138
|
| --- | --- | --- |
|
|
140
139
|
| Select, load, unload, inspect, cancel, and use LLM/STT/TTS independently | [`AIProviderRuntime.js`](runtime-modules.md#aiproviderruntimejs) | Cross-host controller; each registered provider declares its own host requirements. |
|
|
141
140
|
| Observe sticky role state and startup settlement | [`AIRuntimeState.js`](runtime-modules.md#airuntimestatejs) | Cross-host EventTarget state; observation grants no authority. |
|
|
142
|
-
| Offer explicit selected-model start/cancel UI | [`chat.html`](runtime-components.md#chathtml)
|
|
141
|
+
| Offer explicit selected-model start/cancel UI | [`chat.html`](runtime-components.md#chathtml), [`speech.html`](runtime-components.md#speechhtml), and [`voice-transcription.html`](runtime-components.md#voice-transcriptionhtml) | Browser/native WebView components; user activation emits a cancelable request before any LLM or STT load intent, and recording stays disabled without sticky ready STT. |
|
|
143
142
|
| Use Core-normalized chat | [`globalThis.Arcane.ai`](core/arcane-ai-contracts.md) | Native/Core only when separately admitted. |
|
|
144
143
|
| Run a caller-selected GGUF LLM locally | [`arcane-os/ai/browser-wasm`](ai/browser-wasm.md) | Browser secure context with WebGPU/full-offload evidence, WebAssembly, and OPFS/DBOPFS. |
|
|
145
144
|
| Run caller-selected Whisper/Kokoro locally | [`arcane-os/ai/browser-speech`](ai/browser-speech.md) | Browser with DBOPFS, Web Locks, Workers, and caller-supplied immutable runtime/model bytes. |
|
|
@@ -153,11 +152,12 @@ profiles, tools, business policy, and private data remain app-owned.
|
|
|
153
152
|
|
|
154
153
|
An explicitly selected but unloaded model is not “ready.” `chat.html` keeps
|
|
155
154
|
Send disabled and exposes a visible keyboard-operable LLM Start/Try again or
|
|
156
|
-
Cancel loading control. `speech.html`
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
`requestSTTActivation(intent)`, or
|
|
160
|
-
event. Imports and state
|
|
155
|
+
Cancel loading control. `speech.html` and `voice-transcription.html` keep their
|
|
156
|
+
recording operations unavailable and share the equivalent Start
|
|
157
|
+
transcription/Try again/Cancel loading control for STT. Applications can
|
|
158
|
+
override `requestAIActivation(intent)` or `requestSTTActivation(intent)`, or
|
|
159
|
+
cancel the corresponding activation-request event. Imports and state
|
|
160
|
+
observation emit no lifecycle intent, and default
|
|
161
161
|
`startTranscription=false` does not request an STT startup load or begin an
|
|
162
162
|
automatic model download. It does not unload a role started independently.
|
|
163
163
|
Compatibility availability never creates ready STT/TTS state without an
|
|
@@ -17,7 +17,7 @@ with the [normalized AI guide](../README.md#normalized-ai) and
|
|
|
17
17
|
| --- | --- | --- |
|
|
18
18
|
| Browser | Shipped | Requires DBOPFS/OPFS, Web Locks, Workers, Fetch or an injected fetch function, Blob/File, and object URLs. |
|
|
19
19
|
| Native WebView | Conditional | Works only when the WebView exposes the same browser APIs and the application admits every artifact. This does not invoke Core speech. |
|
|
20
|
-
| Node | Importable, execution unavailable | The ESM subpath is exported, but `0.2.
|
|
20
|
+
| Node | Importable, execution unavailable | The ESM subpath is exported, but `0.2.2` publishes no Node speech storage, Worker, audio-decoder, or execution adapter. |
|
|
21
21
|
| Cloud | Not provided | A cloud speech provider can implement `arcane-ai-provider/2`, but this package never selects one. |
|
|
22
22
|
|
|
23
23
|
Browser speech is independent from `arcane-os/ai/browser-wasm`: the Wllama
|
|
@@ -9,7 +9,7 @@ page is the focused local-browser path beneath the normalized AI decision
|
|
|
9
9
|
guide.
|
|
10
10
|
|
|
11
11
|
The wiring example assumes a scaffolded or materialized Arcane application
|
|
12
|
-
with SDK `0.2.
|
|
12
|
+
with SDK `0.2.2`'s authenticated runtime tree and generated browser import map.
|
|
13
13
|
`arcane/DBOPFS` is a managed browser-map specifier, not an npm package export.
|
|
14
14
|
See [browser runtime delivery](../protocols.md#browser-runtime-delivery) before
|
|
15
15
|
using the example in a custom host or bundler.
|
|
@@ -91,7 +91,7 @@ surface does not require an Arcane Core method grant because it does not call a
|
|
|
91
91
|
Core host. Browser Fetch, CORS, storage policy, secure-context behavior, and
|
|
92
92
|
resource limits still apply.
|
|
93
93
|
|
|
94
|
-
The shipped `0.2.
|
|
94
|
+
The shipped `0.2.2` runtime requires WebGPU and has no CPU fallback. A successful
|
|
95
95
|
load requests full GPU offload (`gpuLayers: 99999`) and admits actual adapter,
|
|
96
96
|
full-offload, buffer, queue, and settled-fence evidence. `navigator.gpu`
|
|
97
97
|
presence by itself is not readiness. The provider emits the instrumented
|
|
@@ -128,8 +128,11 @@ through an SDK-created authority and DBOPFS artifact store.
|
|
|
128
128
|
|
|
129
129
|
The projected [`AIProviderRuntime`](runtime-modules.md#aiproviderruntimejs)
|
|
130
130
|
normalizes those browser providers and can admit an externally supplied native
|
|
131
|
-
or cloud provider/2 adapter.
|
|
132
|
-
|
|
131
|
+
or cloud provider/2 adapter. `AI.js` also supplies compatibility adapters for
|
|
132
|
+
an already-selected legacy OpenAI route, Ollama route, or admitted Core speech
|
|
133
|
+
route. SDK `0.2.2` publishes no privileged Core implementation, credential,
|
|
134
|
+
model, or speech-runtime authority, and those adapters never probe, select,
|
|
135
|
+
download, or fall back. The sticky
|
|
133
136
|
[`AIRuntimeState`](runtime-modules.md#airuntimestatejs) surface keeps
|
|
134
137
|
application UI independent of transport. A selected route remains explicit:
|
|
135
138
|
browser failure is not permission to invoke Core or cloud.
|
|
@@ -37,7 +37,7 @@ release acceptance.
|
|
|
37
37
|
| EventManager and event stacks | Live pub/sub ordering and payload identity, nested causation, immutable/redacted snapshots, strict import, bounded overflow, seek, all playback modes/lifecycle outcomes, cancellation, and DOM start/stop/privacy behavior. | Real user journeys and browser layout belong in a browser harness; event-stack review never proves that external side effects can be replayed. |
|
|
38
38
|
| CLI | Commands parse, acknowledge, select one scope, produce normalized human/JSON/NDJSON output, propagate cancellation/failure, and reject invalid cardinality. | Native build/run requires the selected real provider and host. |
|
|
39
39
|
| Browser runtime modules | Every shipped ESM module parses and its export inventory matches the catalog; pure helpers run focused success/error cases. | DOM, OPFS, media, and Web Component journeys use a browser harness. |
|
|
40
|
-
| Provider-neutral AI runtime and chat/speech activation | Provider/2 registration, closed three-role configuration, opt-in STT startup, legacy Cloud/Core speech readiness, independent LLM/STT/TTS load/unload/status, latest-request-wins settlement, owned STT signals, TTS mute lifecycle, route-owned voice defaults, sticky-state-only speech
|
|
40
|
+
| Provider-neutral AI runtime and chat/speech activation | Provider/2 registration, closed three-role configuration, opt-in STT startup, legacy Cloud/Core speech readiness, independent LLM/STT/TTS load/unload/status, latest-request-wins settlement, owned STT signals, TTS mute lifecycle, route-owned voice defaults, sticky-state-only readiness for both speech components, shared selected-unloaded activation request/cancellation/error behavior, fail-closed programmatic voice recording, public transcript-replacement supersession of late transcribe/save/complete settlement, `AI.fetchSTT` callback-position compatibility, stale-callback suppression, and absence of silent provider fallback are exercised against bounded providers and host callbacks. | Real model/runtime admission remains the selected provider's evidence boundary; provider-promise settlement, state, an abort signal, or an activation event does not by itself prove underlying provider work stopped or native, cloud, or browser-model availability. |
|
|
41
41
|
| Browser-WASM local AI | The exact exported namespace, canonical ordered `{id, files:[{name?,url,bytes?,sha256?},...]}` descriptor plus its one-file compatibility input, fieldwise app/provider/load security precedence, default-unchecked and secure-check paths, observed-byte persistence, honest capability/status reasons, provider/facade lifecycle, lazy/manual policy, successful Wllama-load requirement, abort normalization, and structural-only tool behavior run with bounded deterministic providers. | The publication gate installs the packed SDK into a real Chrome app, loads the authenticated Wllama 3.6.0 JS/WASM assets, configures `secure:true`, performs a cold exact-length/SHA-256 model install, real inference, in-flight cancellation, unload, and a verified offline reload with zero model requests. It is an explicit heavyweight capability gate, not an implicit model download in every local `npm run check`. |
|
|
42
42
|
| Browser speech | Caller-owned Whisper/Kokoro authority, closed runtime graph, app/provider/load security precedence, manifest-last DBOPFS cache, strict offline admission, independent Worker lifecycle, pre-Worker versus in-Worker cancellation, Blob/File STT conversion, WAV TTS conversion, and no cloud fallback are exercised with bounded synthetic artifacts and adapters. | A real runtime/model/voice download and actual transcription or synthesis require the application's admitted immutable artifacts, licenses, browser media support, and explicit user action. |
|
|
43
43
|
| Persistent chat and document context | Atomic in-memory/history commit, explicit per-turn persistence, single structural tool-call sequencing, bounded bootstrap/search/context, caller-source `evaluate()` budgets, cancellation, and reject versus `preserve-readable` partial coverage are exercised with app-scoped adapters. | Live Core/provider inference and durable browser storage remain separate authorities; tests never treat a fake chat function or in-memory adapter as host/storage proof. |
|
package/docs/reference/cli.md
CHANGED
|
@@ -185,7 +185,7 @@ identical executable alias.
|
|
|
185
185
|
The generated artifact is
|
|
186
186
|
`apps/<id>/modules/arcane.importmap.json`. Its exact JSON is also installed in
|
|
187
187
|
the app entry as `<script type="importmap" data-arcane-import-map>` before
|
|
188
|
-
module loading. In SDK `0.2.
|
|
188
|
+
module loading. In SDK `0.2.2`, the complete authenticated physical-v1 runtime
|
|
189
189
|
produces 91 entries and intentionally has no package-root mapping. That count
|
|
190
190
|
describes the shipped SDK closure; the command receipt remains authoritative
|
|
191
191
|
for the exact map written to the selected application.
|
|
@@ -573,8 +573,8 @@ Success returns:
|
|
|
573
573
|
```javascript
|
|
574
574
|
{
|
|
575
575
|
packageName:'arcane-os',
|
|
576
|
-
currentVersion:'0.2.
|
|
577
|
-
registryVersion:'0.2.
|
|
576
|
+
currentVersion:'0.2.1',
|
|
577
|
+
registryVersion:'0.2.2',
|
|
578
578
|
tag:'latest',
|
|
579
579
|
status:'update-available', // or 'current' or 'ahead'
|
|
580
580
|
updateAvailable:true,
|
|
@@ -9,7 +9,7 @@ They are not TypeScript declarations.
|
|
|
9
9
|
|
|
10
10
|
## Portable SDK AI and Core AI
|
|
11
11
|
|
|
12
|
-
The SDK `0.2.
|
|
12
|
+
The SDK `0.2.2` has two related but separate normalized boundaries:
|
|
13
13
|
|
|
14
14
|
| Boundary | Use | Host |
|
|
15
15
|
|---|---|---|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"source": {
|
|
4
4
|
"authority": "sdk-canonical",
|
|
5
5
|
"repository": "https://github.com/TheWizardNexus/arcane-os-sdk.git",
|
|
6
|
-
"commit": "
|
|
6
|
+
"commit": "f97ac4f2e7cc92a00a3a466c38a67446dd112acf",
|
|
7
7
|
"path": "runtime/arcane/components",
|
|
8
|
-
"sdkVersion": "0.2.
|
|
8
|
+
"sdkVersion": "0.2.3",
|
|
9
9
|
"legacyProjection": {
|
|
10
10
|
"repository": "https://github.com/TheWizardNexus/ARCANE-OS.git",
|
|
11
11
|
"commit": "c540014afe69f14cf5ae60493b7295f36dbcec64",
|
|
@@ -689,28 +689,38 @@
|
|
|
689
689
|
{
|
|
690
690
|
"file": "runtime/arcane/components/speech.html",
|
|
691
691
|
"name": "speech.html",
|
|
692
|
-
"purpose": "Coordinates speech controls, transcription completion, mute state, and microphone availability.",
|
|
692
|
+
"purpose": "Coordinates explicit speech-to-text activation, request cancellation, speech controls, transcription completion, mute state, and microphone availability.",
|
|
693
693
|
"methods": [
|
|
694
694
|
"configure()",
|
|
695
695
|
"setAvailability()",
|
|
696
|
-
"setMuted()
|
|
696
|
+
"setMuted()",
|
|
697
|
+
"requestSTTActivation()",
|
|
698
|
+
"destroy()",
|
|
699
|
+
"availability",
|
|
697
700
|
"muted",
|
|
698
701
|
"initialMuted",
|
|
699
|
-
"componentReady
|
|
702
|
+
"componentReady"
|
|
700
703
|
],
|
|
701
704
|
"events": [
|
|
702
705
|
"speech-ready",
|
|
703
706
|
"speech-transcription-complete",
|
|
704
|
-
"speech-
|
|
707
|
+
"speech-transcription-error",
|
|
708
|
+
"speech-transcription-cancelled",
|
|
709
|
+
"speech-microphone-unavailable",
|
|
710
|
+
"speech-stt-activation-request",
|
|
711
|
+
"speech-stt-activation-error",
|
|
712
|
+
"speech-tts-lifecycle-error"
|
|
705
713
|
],
|
|
706
714
|
"slots": [],
|
|
707
715
|
"dependencies": [
|
|
708
716
|
"AI.js",
|
|
717
|
+
"AIRuntimeState.js",
|
|
718
|
+
"ComponentContracts.js",
|
|
709
719
|
"DBLS.js"
|
|
710
720
|
],
|
|
711
721
|
"availability": "Browser and supported native WebViews",
|
|
712
722
|
"transport": "HTMLImport + DOM; injected Arcane/provider modules where listed",
|
|
713
|
-
"normalization": "UI state normalized;
|
|
723
|
+
"normalization": "UI/runtime state, explicit STT activation intent, and request-owned cancellation are normalized; positive compatibility booleans cannot manufacture provider readiness; provider/model authority and media behavior remain external"
|
|
714
724
|
},
|
|
715
725
|
{
|
|
716
726
|
"file": "runtime/arcane/components/summary-strip.html",
|
|
@@ -875,9 +885,10 @@
|
|
|
875
885
|
{
|
|
876
886
|
"file": "runtime/arcane/components/voice-transcription.html",
|
|
877
887
|
"name": "voice-transcription.html",
|
|
878
|
-
"purpose": "Records segmented microphone audio, transcribes, persists, and completes a combined transcript.",
|
|
888
|
+
"purpose": "Records segmented microphone audio only after authoritative STT admission, exposes explicit selected-STT activation, transcribes with cancellation, persists, and completes a combined transcript.",
|
|
879
889
|
"methods": [
|
|
880
890
|
"configure()",
|
|
891
|
+
"requestSTTActivation()",
|
|
881
892
|
"startRecording()",
|
|
882
893
|
"stopRecording()",
|
|
883
894
|
"save()",
|
|
@@ -892,17 +903,21 @@
|
|
|
892
903
|
"voice-transcription-segment",
|
|
893
904
|
"voice-transcription-change",
|
|
894
905
|
"voice-transcription-complete",
|
|
895
|
-
"speech-transcription-complete"
|
|
906
|
+
"speech-transcription-complete",
|
|
907
|
+
"speech-transcription-cancelled",
|
|
908
|
+
"speech-stt-activation-request",
|
|
909
|
+
"speech-stt-activation-error"
|
|
896
910
|
],
|
|
897
911
|
"slots": [],
|
|
898
912
|
"dependencies": [
|
|
899
913
|
"MD.js",
|
|
900
914
|
"ComponentContracts.js",
|
|
915
|
+
"AIRuntimeState.js",
|
|
901
916
|
"AI.js"
|
|
902
917
|
],
|
|
903
918
|
"availability": "Browser and supported native WebViews",
|
|
904
919
|
"transport": "HTMLImport + DOM; injected Arcane/provider modules where listed",
|
|
905
|
-
"normalization": "
|
|
920
|
+
"normalization": "Sticky runtime STT readiness, explicit activation, request cancellation, and state/text are normalized; media/provider behavior remains external"
|
|
906
921
|
},
|
|
907
922
|
{
|
|
908
923
|
"file": "runtime/arcane/components/weather-widget.html",
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"source": {
|
|
4
4
|
"authority": "sdk-canonical",
|
|
5
5
|
"repository": "https://github.com/TheWizardNexus/arcane-os-sdk.git",
|
|
6
|
-
"commit": "
|
|
6
|
+
"commit": "f97ac4f2e7cc92a00a3a466c38a67446dd112acf",
|
|
7
7
|
"path": "runtime/arcane",
|
|
8
|
-
"sdkVersion": "0.2.
|
|
8
|
+
"sdkVersion": "0.2.3",
|
|
9
9
|
"legacyProjection": {
|
|
10
10
|
"repository": "https://github.com/TheWizardNexus/ARCANE-OS.git",
|
|
11
11
|
"commit": "c540014afe69f14cf5ae60493b7295f36dbcec64",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"artifactCount": 85,
|
|
17
17
|
"javascriptArtifactCount": 83,
|
|
18
|
-
"esmExportCount":
|
|
18
|
+
"esmExportCount": 319,
|
|
19
19
|
"artifacts": [
|
|
20
20
|
{
|
|
21
21
|
"file": "runtime/arcane/modules/AI.js",
|
|
@@ -407,6 +407,7 @@
|
|
|
407
407
|
"VOICE_MESSAGES",
|
|
408
408
|
"appendTranscription",
|
|
409
409
|
"applyMarkdownFormat",
|
|
410
|
+
"createSTTActivationController",
|
|
410
411
|
"effectiveDashboardVisibility",
|
|
411
412
|
"normalizeChartOptions",
|
|
412
413
|
"normalizeChartRows",
|
|
@@ -417,11 +418,11 @@
|
|
|
417
418
|
"normalizeMarkdownOptions",
|
|
418
419
|
"normalizeVoiceOptions"
|
|
419
420
|
],
|
|
420
|
-
"summary": "Owns normalized configuration/value contracts shared
|
|
421
|
-
"availability": "Cross-host",
|
|
421
|
+
"summary": "Owns normalized configuration/value contracts and shared explicit STT activation behavior for chart, dashboard, Markdown, and voice components.",
|
|
422
|
+
"availability": "Cross-host with an injected event constructor outside DOM hosts",
|
|
422
423
|
"protocol": "In-process only",
|
|
423
|
-
"normalization": "Fully normalized labels, rows, definitions, visibility, formats, editor and voice options.",
|
|
424
|
-
"surface": "
|
|
424
|
+
"normalization": "Fully normalized labels, rows, definitions, visibility, formats, editor and voice options, plus capability-neutral STT activation intent and presentation state.",
|
|
425
|
+
"surface": "Constant sets plus normalization, formatting, and explicit STT activation helpers."
|
|
425
426
|
},
|
|
426
427
|
{
|
|
427
428
|
"file": "runtime/arcane/modules/ConfiguredAIChatSession.js",
|
|
@@ -104,12 +104,12 @@ import ollama from 'arcane/Ollama';
|
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
The authenticated physical-v1 tree lives entirely beneath `arcane/`. SDK
|
|
107
|
-
`0.2.
|
|
107
|
+
`0.2.3` projects it from two canonical release receipts:
|
|
108
108
|
|
|
109
109
|
| Canonical receipt | Source authority and protocol | Receipt inventory |
|
|
110
110
|
| --- | --- | --- |
|
|
111
|
-
| `runtime/ARCANE_RUNTIME_RELEASE.json` | `sdk-canonical`; `arcane/1`; builder `arcane-sdk-runtime-v1` | 160 files; 3,
|
|
112
|
-
| `browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json` | `arcane-os-sdk`; `arcane-sdk-browser-runtime/1`; builder `arcane-sdk-browser-runtime-v1` | 25 files; 9,
|
|
111
|
+
| `runtime/ARCANE_RUNTIME_RELEASE.json` | `sdk-canonical`; `arcane/1`; builder `arcane-sdk-runtime-v1` | 160 files; 3,655,536 bytes; content SHA-256 `f96a27bd79a809201708f73ca729bc60ab02696daf619365f77267a28b47b4b3` |
|
|
112
|
+
| `browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json` | `arcane-os-sdk`; `arcane-sdk-browser-runtime/1`; builder `arcane-sdk-browser-runtime-v1` | 25 files; 9,280,047 bytes; content SHA-256 `3c82ed11b24c7b7b91b62f6dc52e0b1dcd444112a29cd48413eedc008380eb61` |
|
|
113
113
|
|
|
114
114
|
The runtime receipt is the current byte authority. Its Arcane OS
|
|
115
115
|
`c540014afe69f14cf5ae60493b7295f36dbcec64` / bundle `0.8.12` record is
|
|
@@ -123,7 +123,7 @@ versions from aliasing one another.
|
|
|
123
123
|
|
|
124
124
|
Those two receipt inventories contain 185 entries in total. That sum is a
|
|
125
125
|
release-inventory fact, not an import-map entry count and not an assertion about
|
|
126
|
-
one maintained example. The `0.2.
|
|
126
|
+
one maintained example. The `0.2.3` map deterministically roots every admitted
|
|
127
127
|
top-level runtime ESM plus the authenticated SDK browser roots, then follows
|
|
128
128
|
those roots for runtime entities and dependency compatibility. Application
|
|
129
129
|
source imports do not select the 91 entries. Its public operation receipt is the
|
|
@@ -188,8 +188,8 @@ authority with exactly `dependencyName`, `packageSource`,
|
|
|
188
188
|
`canonicalPackageRoot`, `packageName`, `packageVersion`, `runtimeRoot`,
|
|
189
189
|
`browserRuntimeRoot`, `runtimeManifest`, and `browserRuntimeManifest`. A
|
|
190
190
|
workspace may use the canonical dependency name or one exact npm alias such as
|
|
191
|
-
`npm:arcane-os@0.2.
|
|
192
|
-
exactly as `arcane-os@0.2.
|
|
191
|
+
`npm:arcane-os@0.2.3`; the physical package manifest must still identify
|
|
192
|
+
exactly as `arcane-os@0.2.3`. Canonical-plus-alias duplicates, multiple aliases,
|
|
193
193
|
links/junctions, indirect package roots, or version drift fail closed.
|
|
194
194
|
|
|
195
195
|
The imported module can be pure browser logic, standard-Web-API logic, or a
|
|
@@ -225,19 +225,19 @@ heartbeat is event telemetry only and never regenerates browser state.
|
|
|
225
225
|
</details>
|
|
226
226
|
|
|
227
227
|
<details>
|
|
228
|
-
<summary>SDK 0.2.
|
|
228
|
+
<summary>SDK 0.2.3 browser-runtime admission and exact receipt fields</summary>
|
|
229
229
|
|
|
230
230
|
`arcane.lock.json.sdkBrowserRuntime` persists the trusted manifest path,
|
|
231
231
|
`manifestSha256`, `contentSha256`, `builder`, `sdkVersion`, and `source` record.
|
|
232
|
-
For SDK `0.2.
|
|
232
|
+
For SDK `0.2.3`, the manifest itself records:
|
|
233
233
|
|
|
234
234
|
```text
|
|
235
235
|
manifest: node_modules/arcane-os/browser-runtime/ARCANE_SDK_BROWSER_RELEASE.json
|
|
236
236
|
fileCount: 25
|
|
237
|
-
totalBytes:
|
|
238
|
-
contentSha256:
|
|
237
|
+
totalBytes: 9280047
|
|
238
|
+
contentSha256: 3c82ed11b24c7b7b91b62f6dc52e0b1dcd444112a29cd48413eedc008380eb61
|
|
239
239
|
builder: arcane-sdk-browser-runtime-v1
|
|
240
|
-
sdkVersion: 0.2.
|
|
240
|
+
sdkVersion: 0.2.3
|
|
241
241
|
source.protocol: arcane-sdk-browser-runtime/1
|
|
242
242
|
source.browserEntry: arcane-os/event-manager
|
|
243
243
|
```
|
|
@@ -263,9 +263,8 @@ Application code should select a normalized role, not an internal protocol.
|
|
|
263
263
|
The exported
|
|
264
264
|
[`getAIProviderRuntime()` singleton](runtime-modules.md#aiproviderruntimejs)
|
|
265
265
|
comes from authenticated runtime bytes and owns independent `llm`, `stt`, and
|
|
266
|
-
`tts` selections.
|
|
267
|
-
speech provider/2 adapters
|
|
268
|
-
below. Current source also adapts selected legacy OpenAI LLM/STT/TTS,
|
|
266
|
+
`tts` selections. SDK `0.2.3` ships browser-WASM LLM and browser
|
|
267
|
+
speech provider/2 adapters and also adapts selected legacy OpenAI LLM/STT/TTS,
|
|
269
268
|
Core-backed Ollama LLM, and admitted Core speech STT/TTS routes into provider/2;
|
|
270
269
|
other native, Core, or cloud routes require an externally supplied compatible
|
|
271
270
|
adapter. The singleton itself is not an authentication or capability token. It
|
|
@@ -301,7 +300,7 @@ compatible completed cache, otherwise it rejects with
|
|
|
301
300
|
`ARCANE_AI_MODEL_OFFLINE_MISS`. Unload releases the active Wllama session but
|
|
302
301
|
does not silently delete the app-owned cache.
|
|
303
302
|
|
|
304
|
-
SDK `0.2.
|
|
303
|
+
SDK `0.2.3` requires WebGPU. Load requests full offload with exactly 99,999 GPU
|
|
305
304
|
layers and admits the model only after observing an adapter, full layer offload,
|
|
306
305
|
buffer and queue work, and a settled fence. `navigator.gpu` presence alone is
|
|
307
306
|
not readiness. There is no CPU fallback, partial-offload success mode, or
|
|
@@ -378,14 +377,19 @@ STT. It declines to request a startup STT load; it does not unload a role alread
|
|
|
378
377
|
started through another explicit lifecycle action. A selected unloaded
|
|
379
378
|
transcription provider remains selected and unloaded until a user lifecycle
|
|
380
379
|
intent or explicit `startTranscription:true` opt-in asks the provider owner to
|
|
381
|
-
load it. Neither state observation nor
|
|
382
|
-
model or selects a fallback.
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
380
|
+
load it. Neither state observation nor either shared speech component imports a
|
|
381
|
+
model or selects a fallback. `speech.html` and `voice-transcription.html` consume
|
|
382
|
+
one shared `createSTTActivationController()` contract for selected, unloaded,
|
|
383
|
+
loading, unloading, error, and ready presentation plus cancelable user intent.
|
|
384
|
+
Both keep capture fail-closed until sticky STT state is exactly ready.
|
|
385
|
+
|
|
386
|
+
Each shared speech component owns an `AbortController` for its STT request and
|
|
387
|
+
passes its signal through `AI.fetchSTT()`. `voice-transcription.html` also adds
|
|
388
|
+
that signal to the existing injected `transcribe(file,context)` callback
|
|
389
|
+
context. Cancel, readiness loss, superseding capture, and component teardown
|
|
390
|
+
abort the owned signal and suppress late delivery. Whether the provider's
|
|
391
|
+
underlying computation stops remains governed by its own cancellation contract.
|
|
392
|
+
User TTS unmute calls `AI.setSpeechMuted(false)` before
|
|
389
393
|
or with its load intent so the runtime records the unmuted lifecycle preference;
|
|
390
394
|
mute calls `AI.setSpeechMuted(true)`, cancels active synthesis, and unloads TTS.
|
|
391
395
|
The selected TTS model catalog owns `defaultVoice`. AI.js uses a saved OpenAI
|