arcane-os 0.89.0 → 0.91.0

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,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.91.0
4
+
5
+ - Persist complete native `modelAssets.prepare()` acquisitions across release,
6
+ unload, service disposal and process restart. Reuse the complete ordered
7
+ source selection from its selected store, with independent caller lifetimes,
8
+ cancellation and progress. Explicit `refresh: true` acquires a new complete
9
+ set while preserving earlier completed acquisitions and retained uses.
10
+ - Add `packageApp({browserDecisions: true})` to acquire the upstream browser
11
+ decision distribution inside the package stage beside the actual selected
12
+ SDK module, including installed aliases and relocated routes. Both module
13
+ formats retain complete executables and licenses; default and dry-run
14
+ behavior stay unchanged. Existing workspace materialization remains supported.
15
+ - Reuse the retained Windows host, Whisper and ONNX runtime archives; this
16
+ release changes shared JavaScript acquisition and packaging, not those native
17
+ binaries. Application adoption and native model acceptance remain separately
18
+ owned.
19
+
20
+ ## 0.90.0
21
+
22
+ - Add optional `remoteBase` to repository workspaces, Git text snapshots and
23
+ explicit pull/push targets. Applications can declare a remote as a local
24
+ filesystem locator and capture its native absolute Git argument before
25
+ asynchronous work or queueing, independently of later directory changes.
26
+ - Preserve original remote, ref and base text in public outcomes. Omission
27
+ retains ordinary Git remote names, URLs, SCP-like addresses and remote-helper
28
+ strings without guessed parsing; existing identity, cancellation, complete
29
+ diagnostics and configured-operation behavior remain unchanged.
30
+ - Reuse the retained compatible Windows host, Whisper and ONNX runtime assets
31
+ on this numeric release. No native implementation change is included.
32
+
3
33
  ## 0.89.0
4
34
 
5
35
  - Add explicitly selected clone-local author name/email before the first
package/README.md CHANGED
@@ -25,7 +25,7 @@ selected SDK projection or an explicit live SDK source mount. Both profiles
25
25
  share the theme, packaging, event, cancellation,
26
26
  and browser run contracts while retaining their selected application layout.
27
27
 
28
- This checkout defines the `0.88.1` SDK contract. Development applications declare
28
+ This checkout defines the `0.91.0` SDK contract. Development applications declare
29
29
  `arcane-os` as `latest` and retain their lockfile. Exact SDK pins begin when Roshi
30
30
  designates a production build. Follow [Consumer updates](docs/consumer-updates.md)
31
31
  to refresh and compare the installed SDK and lockfile with the published channel;
@@ -95,14 +95,18 @@ pipeline. Existing Wllama, cloud, speech and chat APIs are unchanged.
95
95
 
96
96
  ## Extension-local executables (Manifest V3)
97
97
 
98
- During the application's ordinary SDK materialization, opt into the upstream
99
- browser distribution through the public Node API:
98
+ When packaging the application, opt into the upstream browser distribution
99
+ through the public Node API:
100
100
 
101
101
  ```js
102
- import {materializeInstalledSdkRuntime} from 'arcane-os';
102
+ import {packageApp} from 'arcane-os';
103
103
 
104
- await materializeInstalledSdkRuntime({
104
+ const release = await packageApp({
105
105
  workspaceRoot: process.cwd(),
106
+ appId: 'moon-dashboard',
107
+ outputDirectory: 'dist/extension/app',
108
+ moduleFormat: 'native',
109
+ browserPwa: false,
106
110
  browserDecisions: true
107
111
  });
108
112
  ```
@@ -111,30 +115,50 @@ This acquires the official bundled Transformers.js `4.3.0`
111
115
  `transformers.min.js`, matching ONNX Runtime
112
116
  `1.31.0-dev.20260914-8d85527a0` `ort-wasm-simd-threaded.asyncify.mjs` and
113
117
  `ort-wasm-simd-threaded.asyncify.wasm`, plus `TRANSFORMERS-LICENSE` and
114
- `ONNX-RUNTIME-LICENSE`. The five complete files are staged under
115
- `arcane/sdk/ai/decisions-runtime/` before replacing the projected runtime.
116
- Retain the supplied licenses with the distribution. No bundler, Node engine
117
- dependency tree, model graph or tokenizer is installed by this option.
118
- Repeat `browserDecisions: true` on each materialization that should retain
119
- this closure; whole-tree replacement removes files absent from a later selection.
120
-
121
- The result's `workspaceRuntime.browserDecisions` contains `directory`,
122
- `transformersVersion`, `onnxRuntimeVersion` and `files`. The lower-level
118
+ `ONNX-RUNTIME-LICENSE`. The five complete files are acquired only into the
119
+ package stage, under `decisions-runtime/` beside the selected SDK
120
+ `ai/browser-decisions.mjs`. Installed-package routes retain their actual
121
+ dependency path, including npm aliases: for example,
122
+ `node_modules/arcane-os/browser-runtime/ai/decisions-runtime/` inside
123
+ `release.outputRoot`. The installed dependency and application source remain
124
+ unchanged; this route creates no workspace-root `arcane/` projection.
125
+
126
+ Acquisition follows SDK module/asset rewriting, preserving complete upstream
127
+ executable content and licenses unchanged. It works with both
128
+ `moduleFormat: 'native'` and the default `'import-map'`. The returned `files`
129
+ and release manifest include the distribution; when browser PWA generation
130
+ is enabled, its ordinary offline include/exclude selection applies too.
131
+ Retain the supplied licenses with the deployment. No bundler, Node engine
132
+ dependency tree, model graph or tokenizer is installed by this option. Select
133
+ `browserDecisions: true` on each package build that should acquire the closure.
134
+ The default `false` and `dryRun: true` perform no optional acquisition; dry runs
135
+ report selected input files rather than downloaded distribution files.
136
+
137
+ Existing physical workspace projections retain
138
+ `materializeInstalledSdkRuntime({workspaceRoot, browserDecisions: true})`.
139
+ That operation stages these files under `arcane/sdk/ai/decisions-runtime/`
140
+ before replacing the projection, returning `directory`, `transformersVersion`,
141
+ `onnxRuntimeVersion` and `files` under `workspaceRuntime.browserDecisions`.
123
142
  `materializeWorkspaceRuntimeContent()` accepts the same option and returns
124
- that record directly as `result.browserDecisions`. Omission performs no
125
- optional network acquisition. The fixed distribution files are acquired
126
- concurrently, once each per selected materialization. Events
143
+ that record as `result.browserDecisions`. Repeat the option on each projection
144
+ refresh that should retain the closure. Installed-package applications use
145
+ `packageApp()` above, because their routes read from the installed dependency
146
+ rather than this separate projection.
147
+
148
+ Both operations share one distribution owner. Its fixed files are acquired
149
+ concurrently, once each per operation. Events
127
150
  `workspace.decisions.started` and `workspace.decisions.progress` expose
128
151
  `completed`/`total` file counts; each progress event also has `file` and `url`.
129
152
  Cancellation and HTTP or observer failure abort/join pending acquisition and
130
- preserve the prior runtime. An HTTP failure retains the complete response as
153
+ preserve the prior package output or physical runtime. An HTTP failure retains
154
+ the complete response as
131
155
  `error.response` (`url`, `status`, `statusText`, `headers`, `content`), including
132
156
  inside `AggregateError.errors` when several operations fail.
133
157
 
134
158
  Load from an extension-owned module script, using the deployed SDK path:
135
159
 
136
160
  ```js
137
- import {createBrowserDecisionModel} from './arcane/sdk/ai/browser-decisions.mjs';
161
+ import {createBrowserDecisionModel} from './node_modules/arcane-os/browser-runtime/ai/browser-decisions.mjs';
138
162
 
139
163
  const decisions = createBrowserDecisionModel({
140
164
  family: 'laya',
@@ -147,6 +171,9 @@ const decisions = createBrowserDecisionModel({
147
171
  await decisions.load();
148
172
  ```
149
173
 
174
+ Use the actual deployed alias path when the dependency has another name;
175
+ physical projections instead use `./arcane/sdk/ai/browser-decisions.mjs`.
176
+
150
177
  For Julia-1, change the family/model to `julia` /
151
178
  `SupersonicLabs/Julia-1-ONNX` and select `dtype: 'fp32'`. Model and tokenizer
152
179
  data remain upstream resources served through the same store, preserving its
@@ -401,6 +401,11 @@ or service. Availability of a particular engine belongs to the selected
401
401
  local-AI installer and service; a generic ONNX runtime is not a speech model.
402
402
 
403
403
  Selected `onnx` bundles its complete managed `onnxruntime-node` dependency tree.
404
+ For the SDK-selected Windows x64 ONNX `1.30.0` distribution, that tree includes
405
+ the corrected native libraries and its runtime record retains
406
+ `nativeDistributionRevision: '1.30.0-directml-reshape-1'`. See
407
+ [ONNX runtime preparation](local-ai.md#development) for selection,
408
+ release-asset acquisition and existing-installation behavior.
404
409
  Its `modulePath` resolves against the artifact root just as a server runtime's
405
410
  `executable` does. Library/module records need no executable. The generated Core
406
411
  service exposes retained worker sessions through `onnx.load/run/unload/status`;
@@ -47,7 +47,7 @@ const status = await repository.status({signal});
47
47
  await repository.close();
48
48
  ```
49
49
 
50
- `createRepositoryWorkspace({name,directory,dataRoot,remote,branch,longPaths,cloneIdentity,gitIdentity,onEvent,run}={})`
50
+ `createRepositoryWorkspace({name,directory,dataRoot,remote,remoteBase,branch,longPaths,cloneIdentity,gitIdentity,onEvent,run}={})`
51
51
  returns `{directory,open,status,configuration,pull,push,write,close,drain,dispose}`. The `directory`
52
52
  property is the absolute selected working path.
53
53
 
@@ -63,6 +63,10 @@ property is the absolute selected working path.
63
63
  `branch`, when supplied, is passed unchanged to Git's `clone --branch` option;
64
64
  otherwise Git selects the remote's default branch. Existing checkouts keep
65
65
  their own branch, remote, tracked files, untracked files and local changes.
66
+ - Supplying `remoteBase` explicitly declares this initial-clone `remote` to be
67
+ a local filesystem locator. Its native absolute command argument is captured
68
+ during construction. Omission leaves Git's original string interpretation
69
+ unchanged. See [relative local repository locators](#relative-local-repository-locators).
66
70
  - Optional `longPaths` is a boolean for newly cloned Windows checkouts. Explicit
67
71
  `true` or `false` supplies `clone --config core.longpaths=<value>`, so Git
68
72
  writes that choice to the new repository before its first checkout. Omission
@@ -173,13 +177,13 @@ commands for an attached local branch, or three otherwise. Results are not a
173
177
  transaction with later work or external Git activity. The app owns any decision
174
178
  that the current checkout corresponds to its selected repository and branch.
175
179
 
176
- The optional `target:{remote,ref}` on `pull`, `push` and `write` selects that
177
- operation's Git destination. Both fields are nonempty strings representable by
180
+ The optional `target:{remote,ref,remoteBase?}` on `pull`, `push` and `write` selects
181
+ that operation's Git destination. `remote` and `ref` are nonempty strings representable by
178
182
  the native process transport. The SDK captures their exact strings when the
179
183
  call is accepted; later edits to the target object or UI selection cannot
180
184
  redirect queued or active work. Git owns ref parsing, URL interpretation,
181
185
  credentials, hooks and remote outcomes. This target is independent of the
182
- factory's `remote`/`branch`, which remain initial-clone inputs only.
186
+ factory's `remote`/`remoteBase`/`branch`, which remain initial-clone inputs only.
183
187
 
184
188
  ```javascript
185
189
  const observed = await repository.configuration({signal});
@@ -208,6 +212,54 @@ observe, refresh, write and publish. See Git's [pull](https://git-scm.com/docs/g
208
212
  [push](https://git-scm.com/docs/git-push) and [configuration](https://git-scm.com/docs/git-config)
209
213
  contracts.
210
214
 
215
+ ### Relative local repository locators
216
+
217
+ `remoteBase` is an explicit local-path choice, not a hint for a URL parser.
218
+ With it, the SDK derives the Git remote argument using the host's native
219
+ `path.resolve(remoteBase, remote)`. A relative base, including `''` for the
220
+ current directory, is resolved once when a workspace/snapshot owner is
221
+ constructed or a targeted operation is accepted. Later working-directory or
222
+ options-object changes cannot redirect that accepted operation. Base text
223
+ must be representable as a native filesystem path; invalid non-string, NUL or
224
+ unpaired-surrogate input reports `TypeError` without changing the supplied text.
225
+
226
+ Use the same selected absolute base for owners created at different times:
227
+
228
+ ```javascript
229
+ import {createGitTextSnapshot} from 'arcane-os';
230
+ import {createRepositoryWorkspace} from 'arcane-os/core/repositories';
231
+
232
+ const remote = connection.locator; // Keep the original catalog string.
233
+ const remoteBase = connection.localBaseDirectory; // App-selected absolute base.
234
+ const repository = createRepositoryWorkspace({name: connection.name, remote, remoteBase});
235
+ const snapshot = createGitTextSnapshot({
236
+ cacheDirectory: connection.cacheDirectory,
237
+ remote, remoteBase, ref: connection.ref, selectPath: applicationSelectPath
238
+ });
239
+ const target = {remote, remoteBase, ref: connection.ref};
240
+ await repository.write({files: selectedFiles, message, target, signal});
241
+ // This reader wants the newly published selection, so refresh after the write.
242
+ await snapshot.refresh({signal});
243
+ ```
244
+
245
+ The original locator and ref remain unchanged. Public targeted results and
246
+ writer failure outcomes also retain the explicitly supplied original
247
+ `remoteBase`, including its relative spelling or empty string; the derived
248
+ absolute argument stays with the Git invocation. No catalog/configuration
249
+ rewrite, directory change or extra Git command is introduced. The existing
250
+ Git clone may save its supplied remote argument as its ordinary origin setting.
251
+
252
+ Omit `remoteBase` for configured names such as `origin`, URLs, SCP-like addresses,
253
+ remote-helper syntax, or any other string Git should interpret normally. With
254
+ an explicit base, even `origin` means the local path under that base. The SDK
255
+ does not infer intent from slashes, colons or platform path spelling. Factory
256
+ `remoteBase` affects only cloning; an individual pull/push/write uses only its
257
+ own `target.remoteBase`. Omitting `target` retains configured Git behavior.
258
+ The public `repositoryPull` and `repositoryPush` functions accept the same
259
+ target field and capture it before their first asynchronous status operation.
260
+ Actual filesystem, Git, credential and remote failures retain their existing
261
+ complete diagnostics; this option adds no fallback, retry or unborn-state rule.
262
+
211
263
  ## Git identity configuration
212
264
 
213
265
  ```javascript
@@ -438,8 +490,8 @@ Successful completion returns:
438
490
 
439
491
  Each output record retains complete stdout/stderr. `code` and the process
440
492
  termination `signal` are included when a completed process result is available.
441
- When supplied, `target:{remote,ref}` is included in the result or failure outcome
442
- with the original accepted strings.
493
+ When supplied, `target:{remote,ref,remoteBase?}` is included in the result or
494
+ failure outcome with the original accepted strings.
443
495
  An in-progress write also records its current `path` on a failure outcome.
444
496
  `writtenPaths` records successful filesystem writes in input order; `written`
445
497
  becomes true only after every requested write succeeds. The other booleans
@@ -33,12 +33,27 @@ policy stable for the lifetime of its snapshot owner.
33
33
 
34
34
  ## API and lifecycle
35
35
 
36
- `createGitTextSnapshot({cacheDirectory,remote,ref,selectPath,gitIdentity,onEvent,run})`
36
+ `createGitTextSnapshot({cacheDirectory,remote,remoteBase,ref,selectPath,gitIdentity,onEvent,run})`
37
37
  returns `{refresh,close,drain,dispose}`. `run` defaults to the SDK's existing
38
38
  `runProcess`; applications normally omit it. It is the same process adapter
39
39
  contract, not a second process supervisor. `onEvent` is the ordinary SDK event
40
40
  callback and follows its asynchronous completion/error contract.
41
41
 
42
+ Optional `remoteBase` explicitly selects `remote` as a local filesystem locator.
43
+ The owner derives its native absolute Git argument once during construction
44
+ using `path.resolve(remoteBase, remote)`, independently of the cache location
45
+ and later working-directory changes. A relative base is captured against the
46
+ construction-time working directory; `''` explicitly selects that directory.
47
+ The caller's original locator and options remain unchanged. Without this field,
48
+ every existing Git remote string keeps its ordinary meaning; the SDK does not
49
+ guess whether a name, URL, colon or slash describes a local path.
50
+
51
+ Use the same app-selected absolute base for snapshot, workspace clone and each
52
+ explicit pull/push/write target. Factory clone inputs do not become operation
53
+ targets. See [relative local repository locators](core-repositories.md#relative-local-repository-locators)
54
+ for the shared contract, original target outcomes and example. This option adds
55
+ no I/O, remote probe, configuration change, retry or empty-remote success path.
56
+
42
57
  Optional `gitIdentity:{name?,email?,username?}` uses the shared
43
58
  [Git identity configuration contract](core-repositories.md#git-identity-configuration).
44
59
  Supplied strings are captured during construction and accompany every Git
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "sdkVersion": "0.88.1",
3
+ "sdkVersion": "0.90.0",
4
4
  "environment": {
5
5
  "runtime": "Node.js for Node entrypoints; browser for browser-only entrypoints",
6
6
  "minimumVersion": "22.23.2 for Node entrypoints",
@@ -311,14 +311,14 @@
311
311
  "name": "createRepositoryWorkspace",
312
312
  "displayName": "createRepositoryWorkspace()",
313
313
  "kind": "function",
314
- "signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,branch,longPaths,cloneIdentity,gitIdentity,onEvent,run=runProcess}={})",
314
+ "signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,remoteBase,branch,longPaths,cloneIdentity,gitIdentity,onEvent,run=runProcess}={})",
315
315
  "entrypoints": ["arcane-os/core/repositories"],
316
316
  "primaryImport": "arcane-os/core/repositories",
317
317
  "group": "Native repository workspaces",
318
318
  "summary": "Owns one selected native working checkout with ArcaneData/Repos defaults and existing Git/process lifecycle.",
319
319
  "availability": "Node with Git on Windows, Linux and macOS; Android requires host process adaptation",
320
320
  "protocol": "Git working repository and SDK process adapter",
321
- "normalization": "Returns directory, open, status, configuration, pull, push, write and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are preserved. Optional longPaths captures a boolean: explicit Windows true/false supplies clone-local core.longpaths before the first checkout, persisting only in the new repository under ordinary Git configuration precedence. Omission preserves configuration; existing repositories and non-Windows clone commands remain unchanged. No global setting or migration. configuration observes the existing root, symbolic HEAD, origin URL/pushURL arrays and branch remote/merge/upstream URL arrays without clone/init/fetch, preserving unset, empty and repeated values. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work. pull/push/write accept a captured target {remote,ref} for current-branch fast-forward pull or non-force current-HEAD selected-ref push; omission retains ordinary configured behavior. write snapshots exact text and paths, stages/commits only literal owned paths and preserves unrelated staged files and Git filters. Complete outputs and causal failures retain confirmed local/committed/pushed and uncertain outcomes plus the supplied target. Optional gitIdentity captures name/email/username for child Git operations only; omitted fields remain inherited and identity selection writes no config file. Optional cloneIdentity captures exact name/email strings and persists only supplied fields through clone --config before the first checkout on every supported platform. Empty strings are explicit; omitted or undefined fields preserve inherited/template configuration. Existing checkouts are never reconfigured. Unrepresentable process arguments fail honestly without transforming them. This option changes no global configuration or credentials and does not identify an authenticated account; command-local gitIdentity remains independent."
321
+ "normalization": "Returns directory, open, status, configuration, pull, push, write and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are preserved. Optional factory remoteBase explicitly selects the initial-clone remote as a local filesystem locator and captures path.resolve(remoteBase, remote) once at construction. A relative base, including an empty string, uses the construction-time working directory. Only the Git argument is derived; the caller's original locator remains unchanged. Omission preserves every Git remote name, URL, SCP-like address and remote-helper string without guessed parsing. Optional longPaths captures a boolean: explicit Windows true/false supplies clone-local core.longpaths before the first checkout, persisting only in the new repository under ordinary Git configuration precedence. Omission preserves configuration; existing repositories and non-Windows clone commands remain unchanged. No global setting or migration. configuration observes the existing root, symbolic HEAD, origin URL/pushURL arrays and branch remote/merge/upstream URL arrays without clone/init/fetch, preserving unset, empty and repeated values. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work. pull/push/write accept a captured target {remote,ref,remoteBase?} for current-branch fast-forward pull or non-force current-HEAD selected-ref push; omission retains ordinary configured behavior. An operation's own remoteBase declares local-path intent and captures its native absolute argument once at acceptance, before queueing; factory remote/remoteBase/branch remain independent clone inputs. Targeted pull/push results and writer results/failure outcomes retain the original remote, ref and supplied remoteBase, including relative or empty base text. Unrepresentable base text reports TypeError without transformation. write snapshots exact text and paths, stages/commits only literal owned paths and preserves unrelated staged files and Git filters. Complete outputs and causal failures retain confirmed local/committed/pushed and uncertain outcomes plus the supplied target. Optional gitIdentity captures name/email/username for child Git operations only; omitted fields remain inherited and identity selection writes no config file. Optional cloneIdentity captures exact name/email strings and persists only supplied fields through clone --config before the first checkout on every supported platform. Empty strings are explicit; omitted or undefined fields preserve inherited/template configuration. Existing checkouts are never reconfigured. Unrepresentable process arguments fail honestly without transforming them. This option changes no global configuration or credentials and does not identify an authenticated account; command-local gitIdentity remains independent."
322
322
  },
323
323
  {
324
324
  "id": "core-repositories:readGitIdentity",
@@ -441,10 +441,10 @@
441
441
  "entrypoints": ["arcane-os/core/model-assets"],
442
442
  "primaryImport": "arcane-os/core/model-assets",
443
443
  "group": "Core model assets",
444
- "summary": "Owns selected native working-file projections and engine retain handles while original stored model files remain unchanged.",
444
+ "summary": "Owns persistent native model acquisitions, temporary browser projections and actual engine retain lifetimes.",
445
445
  "availability": "Node Core with an application-selected working directory",
446
446
  "protocol": "arcane/1 modelAssets.open/write/complete/release/status and modelAssets.state",
447
- "normalization": "Returns current/prepare/retain/release/dispose and Core service lifecycle. Explicit prepare({id,workingDirectory,members:[{path,url}],signal,onProgress}) streams complete upstream members through the existing file owner and reports file/phase progress. release(id) relinquishes preparation ownership; cancellation and cleanup join fetches/writes. Native retains survive until actual engine release before deleting only the owned working projection. Startup downloads nothing."
447
+ "normalization": "Returns current/prepare/retain/release/dispose and Core service lifecycle. Explicit prepare({id,workingDirectory,members:[{path,url}],signal,onProgress,refresh=false}) reuses complete exact ordered source selections stored beneath workingDirectory/model-assets or streams every selected upstream member concurrently. Complete acquisitions survive release, disposal and restart. refresh:true acquires a separate complete set without overwriting retained originals; ordinary reuse makes no network freshness claim. Matching same-process callers share acquisition with independent callbacks/cancellation, and the final interested cancellation joins unfinished I/O before removing only that attempt. Separate processes may fetch independently. release(id) relinquishes live preparation ownership; actual native retain lifetimes remain. Browser open/write/complete projections retain temporary cleanup after final native use. Startup downloads nothing; no migration, eviction or partial-transfer resumption."
448
448
  },
449
449
  {
450
450
  "id": "core-model-assets-service:default",
@@ -493,14 +493,14 @@
493
493
  "name": "createGitTextSnapshot",
494
494
  "displayName": "createGitTextSnapshot()",
495
495
  "kind": "function",
496
- "signature": "createGitTextSnapshot({cacheDirectory,remote,ref,selectPath,gitIdentity,onEvent,run=runProcess}={})",
496
+ "signature": "createGitTextSnapshot({cacheDirectory,remote,remoteBase,ref,selectPath,gitIdentity,onEvent,run=runProcess}={})",
497
497
  "entrypoints": ["arcane-os"],
498
498
  "primaryImport": "arcane-os",
499
499
  "group": "Workspace, doctor, repository, and server",
500
500
  "summary": "Reads complete selected text from one fetched revision using a dedicated bare Git object cache and batched retrieval.",
501
501
  "availability": "Node with Git; Android requires a host supplying Git/process capability",
502
502
  "protocol": "Git tree and batched blob transport through the shared process owner",
503
- "normalization": "Returns {refresh,close,drain,dispose}; refresh yields {revision,files:[{path,content}]}, shares concurrent work, reuses unchanged revisions, preserves exact UTF-8 text, isolates caller cancellation and drains accepted work. Optional gitIdentity captures name/email/username for child Git commands including bare init and fetch, without changing config files, payloads or shared acquisition lifetime. See git-text-snapshot.md."
503
+ "normalization": "Returns {refresh,close,drain,dispose}; refresh yields {revision,files:[{path,content}]}, shares concurrent work, reuses unchanged revisions, preserves exact UTF-8 text, isolates caller cancellation and drains accepted work. Optional remoteBase explicitly selects remote as a local filesystem locator and derives only its Git fetch argument through path.resolve(remoteBase, remote), once at construction independently of the cache location and later working-directory changes. A relative base, including an empty string, uses the construction-time working directory; original locator/options remain unchanged. Omission preserves every Git remote name, URL, SCP-like address and remote-helper string without guessed parsing. Unrepresentable base text reports TypeError without transformation; existing Git failures remain errors. Optional gitIdentity captures name/email/username for child Git commands including bare init and fetch, without changing config files, payloads or shared acquisition lifetime. See git-text-snapshot.md."
504
504
  },
505
505
  {
506
506
  "id": "diarization:createDiarization",
@@ -609,10 +609,10 @@
609
609
  "entrypoints": ["arcane-os/local-ai"],
610
610
  "primaryImport": "arcane-os/local-ai",
611
611
  "group": "Core local AI",
612
- "summary": "Reuses selected managed native runtimes or installs complete official llama.cpp/Ollama/image distributions, ONNX npm runtime trees or NeMo libraries.",
613
- "availability": "Node; upstream platform and architecture assets determine runtime availability",
614
- "protocol": "Official upstream release archives and selected ONNX/Koffi npm runtime installations",
615
- "normalization": "Returns absolute runtime records, including image library/binding/variant/model metadata; shares matching installs, preserves libraries, reports failures without changing global PATH or services and prepares no model files"
612
+ "summary": "Reuses selected managed native runtimes or installs complete llama.cpp/Ollama/image distributions, ONNX npm runtime trees with selected SDK native libraries, or NeMo libraries.",
613
+ "availability": "Node; selected distribution platform and architecture assets determine runtime availability",
614
+ "protocol": "Upstream release archives and selected ONNX/Koffi npm installations; corrected Windows x64 ONNX native libraries from the installed SDK numeric release",
615
+ "normalization": "Returns absolute runtime records, including image library/binding/variant/model metadata; Windows x64 ONNX with no explicit URL and omitted version or 1.30.0 adds nativeDistributionRevision 1.30.0-directml-reshape-1, reuses that revision or prepares a fresh installation while preserving older trees; explicit URLs and other ONNX versions/platforms retain their upstream package path; shares matching installs, preserves libraries, reports failures without changing global PATH or services and prepares no model files"
616
616
  },
617
617
  {
618
618
  "id": "local-ai:bundleLocalAIRuntimes",
@@ -624,9 +624,9 @@
624
624
  "primaryImport": "arcane-os/local-ai",
625
625
  "group": "Core local AI",
626
626
  "summary": "Copies selected complete runtime distributions into a fresh native artifact staging root.",
627
- "availability": "Node; supports bundling published upstream platform assets independently of the build host",
627
+ "availability": "Node; supports bundling selected published platform assets independently of the build host",
628
628
  "protocol": "Artifact-relative runtime/local-ai layout",
629
- "normalization": "Returns {runtimes,files} with artifact-relative runtime/variant paths and complete inventory; image URL descriptors remain for post-launch preparation and external model working paths report portability incompatibility"
629
+ "normalization": "Returns {runtimes,files} with artifact-relative runtime/variant paths and complete inventory; corrected Windows x64 ONNX retains nativeDistributionRevision and complete native libraries while modulePath becomes artifact-relative; image URL descriptors remain for post-launch preparation and external model working paths report portability incompatibility"
630
630
  },
631
631
  {
632
632
  "id": "root:WS",
@@ -654,7 +654,7 @@
654
654
  "summary": "Explicit-load Laya and Julia-1 decisions with caller-selected precision, complete inputs and graph results.",
655
655
  "availability": "Browser module Workers and the selected Transformers.js backend; import/construction starts no model load",
656
656
  "protocol": "Caller-owned state/question/options rows; five-input decision graph; native Worker request/result lifecycle",
657
- "normalization": "Full field tokenization, raw logits and unrounded softmax; dtype defaults to fp16 for Laya and fp32 for Julia, with explicit values forwarded unchanged. Optional existing SDK store routes actual loader resources through fetchResource outside cloned Worker configuration. By default stored activation also materializes the unchanged runtime entry as a JavaScript object URL, retains its configured URL for later loads and revokes the object URL after Worker termination. Explicit runtime.local:true instead imports same-deployment moduleUrl and wasmPaths.mjs/wasm directly, defaulting to ai/decisions-runtime installed by browserDecisions:true materialization; only those exact executable URLs bypass the model store. It disables upstream executable WASM caching/proxy and selects one WASM thread, preserving the requested inference backend. Stored mode disables competing model caches, preserves complete HTTP responses and joins resource cleanup before outstanding calls settle. Default runtime-entry HTTP failures retain error.response; custom stored entries must support an object URL and changed import.meta.url. Omission retains existing browser behavior; no decision-result persistence or precision fallback"
657
+ "normalization": "Full field tokenization, raw logits and unrounded softmax; dtype defaults to fp16 for Laya and fp32 for Julia, with explicit values forwarded unchanged. Optional existing SDK store routes actual loader resources through fetchResource outside cloned Worker configuration. By default stored activation also materializes the unchanged runtime entry as a JavaScript object URL, retains its configured URL for later loads and revokes the object URL after Worker termination. Explicit runtime.local:true instead imports same-deployment moduleUrl and wasmPaths.mjs/wasm directly, defaulting to adjacent ai/decisions-runtime acquired by packageApp({browserDecisions:true}) for installed-package routes or by the existing physical materializer option; only those exact executable URLs bypass the model store. It disables upstream executable WASM caching/proxy and selects one WASM thread, preserving the requested inference backend. Stored mode disables competing model caches, preserves complete HTTP responses and joins resource cleanup before outstanding calls settle. Default runtime-entry HTTP failures retain error.response; custom stored entries must support an object URL and changed import.meta.url. Omission retains existing browser behavior; no decision-result persistence or precision fallback"
658
658
  },
659
659
  {
660
660
  "id": "root:acceptWebSocket",
@@ -1858,7 +1858,7 @@
1858
1858
  "summary": "Builds one complete app release with browser selection by default. Nonbrowser targets add explicit nativeResources through a late complete-content copy and separate native input output; moduleFormat is independent. Adapters receive actual target and effective browserPwa. Explicit operation outputDirectory wins; staged replacement preserves source and unrelated outputs. No tests or checks run automatically.",
1859
1859
  "availability": "Node",
1860
1860
  "protocol": "SDK packager and deterministic bundle contract",
1861
- "normalization": "Normalized SDK validation with complete canonical archive and release content"
1861
+ "normalization": "Complete selected release content. Optional browserDecisions:true acquires bundled Transformers.js 4.3.0 and matched ONNX Runtime 1.31.0-dev.20260914-8d85527a0 asyncify module/WASM plus licenses beside the selected SDK browser-decisions module in staging only, following installed routes and aliases. Acquisition follows native-module and asset rewriting, preserves complete upstream content, and joins the final release inventory and enabled PWA offline selection. Default false and dryRun perform no optional acquisition. Existing workspace.decisions started/progress events, cancellation, full HTTP errors and joined failure cleanup are preserved; prior output, source and installed dependencies remain unchanged on acquisition failure. Repeat the option per selected package build."
1862
1862
  },
1863
1863
  {
1864
1864
  "id": "root:packageApplication",
@@ -2269,7 +2269,7 @@
2269
2269
  "summary": "Runs one fast-forward-only pull into the selected clean worktree, optionally from a captured remote/ref target.",
2270
2270
  "availability": "Node; network-assisted Git",
2271
2271
  "protocol": "Node ESM",
2272
- "normalization": "SDK-normalized inputs, errors, events, and documented result"
2272
+ "normalization": "Optional target {remote,ref,remoteBase?} is captured before the first asynchronous status operation. A supplied remoteBase declares local-path intent and derives only the Git remote argument using path.resolve(remoteBase, remote), once at acceptance; relative and empty bases use that working directory. Omitted remoteBase preserves Git remote names, URLs, SCP-like addresses and remote-helper strings unchanged. Targeted results retain original remote/ref/supplied remoteBase text and complete stdout/stderr alongside the existing pull result. Unrepresentable base text reports TypeError without transformation. Omitted target preserves configured pull behavior and result shape; clean-worktree, fast-forward-only, cancellation and actual Git error behavior remain unchanged."
2273
2273
  },
2274
2274
  {
2275
2275
  "id": "root:repositoryPush",
@@ -2285,7 +2285,7 @@
2285
2285
  "summary": "Pushes the attached branch through ordinary configured Git or an explicit captured current-HEAD destination without force.",
2286
2286
  "availability": "Node; network-assisted Git",
2287
2287
  "protocol": "Node ESM",
2288
- "normalization": "SDK-normalized inputs, errors, events, and documented result"
2288
+ "normalization": "Optional target {remote,ref,remoteBase?} is captured before the first asynchronous status operation. A supplied remoteBase declares local-path intent and derives only the Git remote argument using path.resolve(remoteBase, remote), once at acceptance; relative and empty bases use that working directory. Omitted remoteBase preserves Git remote names, URLs, SCP-like addresses and remote-helper strings unchanged. Targeted results retain original remote/ref/supplied remoteBase text and complete stdout/stderr alongside the existing push result. Unrepresentable base text reports TypeError without transformation. Omitted target preserves configured push behavior and result shape; attached-branch, non-force current-HEAD publication, cancellation and actual Git error behavior remain unchanged."
2289
2289
  },
2290
2290
  {
2291
2291
  "id": "root:repositoryStatus",
@@ -138,10 +138,23 @@ Zstandard archives use the supported Node runtime's decompressor.
138
138
 
139
139
  Selected ONNX preparation installs `onnxruntime-node@1.30.0` by default into a
140
140
  managed npm prefix, retaining its complete published runtime dependency tree.
141
- It uses the upstream CPU installation option to skip supplementary GPU downloads.
141
+ The npm installation skips supplementary upstream GPU downloads. On Windows
142
+ x64, an omitted version or explicit `1.30.0`, with no explicit `url`, also
143
+ selects the SDK's corrected native distribution, revision
144
+ `1.30.0-directml-reshape-1`. The installer downloads
145
+ `arcane-onnx-runtime-windows-x64.tar.gz` from the installed `arcane-os` package's
146
+ numeric GitHub release and extracts its native libraries into the new
147
+ installation. Its URL is
148
+ `https://github.com/TheWizardNexus/arcane-os-sdk/releases/download/<sdk-version>/arcane-onnx-runtime-windows-x64.tar.gz`.
149
+ The same-version npm JavaScript and binding remain in place. Explicit URLs,
150
+ other ONNX versions and other platform/architecture selections retain their
151
+ upstream package path. For the corrected selection, an existing installation
152
+ without the matching `nativeDistributionRevision` is left intact and a fresh
153
+ installation is prepared; running installations keep their original trees.
142
154
  Node/npm must be available while preparing that runtime; a native app consumes
143
155
  the bundled tree without installing it again. Applications that omit ONNX do
144
- not install its package.
156
+ not install its package. Runtime preparation alone establishes no model or
157
+ device execution result.
145
158
 
146
159
  For the optional development browser connection, load the bootstrap after the
147
160
  managed import map and before creating a Core-backed provider:
@@ -722,7 +735,7 @@ not execution evidence on each platform.
722
735
 
723
736
  ## Native bundling
724
737
 
725
- The SDK portable native build includes selected official runtime trees under
738
+ The SDK portable native build includes complete selected runtime trees under
726
739
  `runtime/local-ai/<runtime-id>`. Runtime records in the artifact are relative
727
740
  to the artifact root and resolve on the destination machine. The generated
728
741
  Core entry composes the local AI service only when the application selects it.
@@ -732,13 +745,16 @@ Model files remain application-selected native resources.
732
745
  `arcane-os/local-ai`. Both accept `{runtimes,directory,platform,architecture,
733
746
  signal,onEvent}`; bundling also requires `outputRoot`. Platform names follow
734
747
  Node: `win32`, `linux`, `darwin`, and supported Android distributions.
735
- Architectures are `x64` or `arm64`. Availability depends on the upstream
736
- runtime's published platform assets; Ollama has no official Android runtime
748
+ Architectures are `x64` or `arm64`. Availability depends on the selected
749
+ distribution's published platform assets; Ollama has no official Android runtime
737
750
  archive in this installer.
738
751
 
739
752
  Ensure returns absolute `{id,version,platform,architecture,root}` records.
740
753
  Server runtimes also include `executable`; ONNX includes `modulePath` pointing
741
- to its public package entry. Image records include `libraryPath`,
754
+ to its public package entry. The corrected Windows x64 ONNX selection also
755
+ includes `nativeDistributionRevision: '1.30.0-directml-reshape-1'`; bundling
756
+ retains that metadata with the complete native libraries. Image records include
757
+ `libraryPath`,
742
758
  `bindingModulePath`, requested `backend`, installed `variants` and selected
743
759
  `models` metadata. Variant records carry backend, runtime root and library path.
744
760
  Bundle returns `{runtimes,files}`,
@@ -1,4 +1,4 @@
1
- # Native working files from model assets
1
+ # Native model acquisitions and working projections
2
2
 
3
3
  Browser preparation and native retain/release ownership were first published in `arcane-os@0.61.0`. Browser
4
4
  preparation is exported by `arcane-os/ai/core-model-assets`, and the native
@@ -110,29 +110,65 @@ try {
110
110
  }
111
111
  ```
112
112
 
113
- `prepare({id,workingDirectory,members,signal,onProgress})` performs standard
114
- fetches only when explicitly called. Every member has its original relative
115
- `path` and selected `url`; the caller supplies the complete companion-file set.
116
- Independent members download concurrently. Each complete response stream is
117
- written directly through the existing ordered native file owner, without a
118
- whole-model buffer or base64 conversion. No model or runtime is selected or
119
- downloaded by service startup. The result is the ready projection snapshot with
120
- ordered `members: [{path,nativePath}]`.
113
+ `prepare({id,workingDirectory,members,signal,onProgress,refresh=false})` reuses
114
+ a complete native acquisition or fetches the explicitly selected members.
115
+ Every member has its original relative `path` and selected `url`; the caller
116
+ supplies the complete companion-file set. Independent members download
117
+ concurrently. Each complete response stream is written directly to its native
118
+ file, without a whole-model buffer or base64 conversion. No model or runtime
119
+ is selected or downloaded by service startup. The result remains the ready
120
+ projection snapshot with ordered `members: [{path,nativePath}]`.
121
121
 
122
- Progress uses `open`, `download`, `complete` and `ready` phases, with
122
+ Complete acquisitions persist under `workingDirectory/model-assets/` across
123
+ release, native unload, service disposal and process restart. Relative working
124
+ directories resolve from `appRoot`. Reuse matches the entire ordered
125
+ `[{path,url}]` selection in that actual store; the operation `id` is a separate
126
+ live lifetime, not the stored selection. Different URLs, relative paths, member
127
+ order or stores select separate acquisitions. Original member names and content
128
+ stay unchanged, and native engines use those files directly. Model, revision,
129
+ precision and device choices remain with their existing owners.
130
+
131
+ Ordinary preparation performs no network freshness check for a completed
132
+ selection. To acquire a mutable source again, explicitly pass `refresh:true` to
133
+ this native `prepare` method. Refresh fetches a new complete set in its own
134
+ directory and keeps earlier complete acquisitions and retained engine uses
135
+ untouched. Later ordinary preparations reuse the newer completed selection.
136
+ A failed refresh leaves the earlier completed acquisition available. Refresh
137
+ does not change the selected URLs or imply upstream revision discovery.
138
+
139
+ Progress uses `open`, `download`, `complete`, `reuse` and `ready` phases, with
123
140
  `completed`, `total` and `unit:'files'`; member progress additionally includes
124
141
  `memberIndex` and `path`. Progress callbacks may return a promise, which the
125
- preparation observes. They must not await cleanup of the preparation currently
126
- calling them. Callback failures remain preparation failures. HTTP failures
142
+ preparation observes in order. Each caller owns its callbacks; a slow or failed
143
+ callback does not hold another caller's transfer or result. Callbacks must not
144
+ await cleanup of the preparation currently calling them. Callback failures
145
+ reject that caller's preparation. HTTP failures
127
146
  retain `url`, `status` and the complete response text in `response`.
128
147
 
129
148
  `release(id)` relinquishes preparation ownership without a request signal.
130
- For active native downloads, release or disposal aborts their fetches and joins
131
- the transfer tasks and native writes before deleting only their owned child
132
- directory. Preparation cancellation and failure follow that same cleanup path;
133
- the original failures and cleanup failures remain observable. A native retain
134
- handle continues to protect completed files through actual engine release.
135
- Native preparation leaves browser DBOPFS originals and unrelated files alone.
149
+ Same-process callers sharing the actual store, complete source selection and
150
+ refresh mode share an acquisition, including across service instances. They
151
+ keep independent operation IDs, retain handles, cancellation and callbacks.
152
+ Cancelling, releasing or disposing one interested caller leaves the others
153
+ running. The final interested caller aborts the acquisition and joins its
154
+ streams, writes and closes before removing only its unfinished attempt. Original
155
+ failures and cleanup failures remain observable. A completed acquisition stays
156
+ available even if a caller cancels or its callback fails after completion.
157
+
158
+ The service records completion only after every selected response and file
159
+ close finishes. That record is ordinary cache state describing the selected
160
+ sources and completed acquisition. A missing original member requires another
161
+ complete acquisition. Failed attempts are removed after their owned I/O drains;
162
+ there is no partial-transfer resumption. An abruptly interrupted process can
163
+ leave an unfinished directory, which later calls ignore without sweeping it.
164
+ There is no automatic migration, eviction or removal of completed acquisitions.
165
+
166
+ Independent processes use disjoint attempt directories and may fetch the same
167
+ selection concurrently. They do not overwrite each other's files or coordinate
168
+ a cross-process acquisition lock. Concurrent completions can produce multiple
169
+ reusable sets; either complete result may be selected when their completion
170
+ order ties. Applications may retain their existing shared Core owner without
171
+ introducing an additional host or application-local cache copy.
136
172
 
137
173
  ```javascript
138
174
  import {createModelAssetService} from 'arcane-os/core/model-assets';
@@ -158,15 +194,18 @@ release. Multiple contexts can retain one prepared set, and repeated inference
158
194
  on a retained context reuses its files.
159
195
 
160
196
  The browser's `projection.release()` relinquishes preparation ownership. It
161
- does not delete files retained by a native engine. Deletion follows the final
162
- native release and removes only that operation's working directory. Core closes
163
- independent services concurrently, so the model-assets service waits for all
164
- native retain handles during disposal instead of assuming service order.
165
- Owners must release their handles after joining their actual engine lifetime.
197
+ does not delete files retained by a native engine. For browser `open`/`write`/
198
+ `complete` projections, deletion follows the final native release and removes
199
+ only that operation's temporary working directory; DBOPFS originals remain
200
+ untouched. Native `prepare` acquisitions remain stored after their final use.
201
+ Core closes independent services concurrently, so the model-assets service
202
+ waits for all native retain handles during disposal instead of assuming service
203
+ order. Owners must release their handles after joining their actual engine
204
+ lifetime.
166
205
 
167
206
  Closing a browser accessor does not by itself establish native unload.
168
207
  Explicitly release unused prepared projections. Core disposal also releases
169
- preparation ownership and cleans up after retained engine uses end.
208
+ preparation ownership and ends the live records after retained engine uses end.
170
209
 
171
210
  ### Native Laya decisions
172
211