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 +30 -0
- package/README.md +1 -1
- package/docs/reference/ai/browser-decisions.md +45 -18
- package/docs/reference/core-native-packaging.md +5 -0
- package/docs/reference/core-repositories.md +58 -6
- package/docs/reference/git-text-snapshot.md +16 -1
- package/docs/reference/inventory/package-api.json +17 -17
- package/docs/reference/local-ai.md +22 -6
- package/docs/reference/model-assets.md +63 -24
- package/docs/reference/native-decisions.md +19 -4
- package/docs/reference/sdk-api.md +111 -22
- package/package.json +1 -1
- package/src/browser-decisions-distribution.mjs +95 -0
- package/src/core/repositories.mjs +7 -6
- package/src/core/services/model-assets.mjs +256 -76
- package/src/git-text-snapshot.mjs +4 -2
- package/src/packager/core.mjs +29 -2
- package/src/repository.mjs +33 -8
- package/src/workspace-runtime.mjs +1 -79
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.
|
|
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
|
-
|
|
99
|
-
|
|
98
|
+
When packaging the application, opt into the upstream browser distribution
|
|
99
|
+
through the public Node API:
|
|
100
100
|
|
|
101
101
|
```js
|
|
102
|
-
import {
|
|
102
|
+
import {packageApp} from 'arcane-os';
|
|
103
103
|
|
|
104
|
-
await
|
|
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
|
|
115
|
-
`
|
|
116
|
-
|
|
117
|
-
dependency
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
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/
|
|
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
|
|
177
|
-
operation's Git destination.
|
|
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
|
|
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.
|
|
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
|
|
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})
|
|
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
|
|
613
|
-
"availability": "Node;
|
|
614
|
-
"protocol": "
|
|
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
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
-
|
|
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
|
|
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
|
|
736
|
-
|
|
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.
|
|
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
|
|
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})`
|
|
114
|
-
|
|
115
|
-
`path` and selected `url`; the caller
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
whole-model buffer or base64 conversion. No model or runtime
|
|
119
|
-
downloaded by service startup. The result
|
|
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
|
-
|
|
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.
|
|
126
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
|
208
|
+
preparation ownership and ends the live records after retained engine uses end.
|
|
170
209
|
|
|
171
210
|
### Native Laya decisions
|
|
172
211
|
|