arcane-os 0.64.0 → 0.66.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 +50 -0
- package/README.md +1 -1
- package/browser-runtime/ai/browser-decisions.mjs +3 -2
- package/browser-runtime/ai/decision-runtime.mjs +14 -24
- package/browser-runtime/core/client.mjs +62 -5
- package/docs/guides/native-whisper-openvino.md +334 -0
- package/docs/publishing.md +39 -0
- package/docs/reference/README.md +11 -1
- package/docs/reference/ai/browser-decisions.md +7 -4
- package/docs/reference/arcane-ollama.md +1 -1
- package/docs/reference/codex-app-server.md +269 -0
- package/docs/reference/core-client.md +60 -2
- package/docs/reference/core-development.md +157 -0
- package/docs/reference/core-native-packaging.md +13 -0
- package/docs/reference/core-repositories.md +232 -4
- package/docs/reference/git-text-snapshot.md +15 -1
- package/docs/reference/inventory/package-api.json +174 -6
- package/docs/reference/inventory/runtime-modules.json +8 -6
- package/docs/reference/local-ai.md +80 -3
- package/docs/reference/local-image-generation.md +5 -0
- package/docs/reference/local-image-sdxl.md +1 -1
- package/docs/reference/local-whisper.md +7 -1
- package/docs/reference/mcp-stdio.md +263 -0
- package/docs/reference/native-speech.md +6 -0
- package/docs/reference/runtime-components.md +18 -1
- package/docs/reference/runtime-modules.md +10 -2
- package/docs/reference/sdk-api.md +346 -4
- package/package.json +6 -2
- package/runtime/arcane/modules/AI.js +156 -13
- package/runtime/arcane/modules/Ollama.js +1 -1
- package/runtime/arcane/modules/OllamaModelIdentifier.js +13 -0
- package/schemas/arcane-app.schema.json +8 -1
- package/schemas/arcane-package.schema.json +8 -1
- package/src/codex/app-server.mjs +845 -0
- package/src/core/development.mjs +457 -0
- package/src/core/repositories.mjs +178 -9
- package/src/core/services/local-ai.mjs +80 -10
- package/src/dev-server.mjs +3 -2
- package/src/git-identity.mjs +132 -0
- package/src/git-text-snapshot.mjs +5 -3
- package/src/index.mjs +1 -0
- package/src/local-ai/dev.mjs +80 -426
- package/src/local-ai/whisper/config.mjs +31 -3
- package/src/local-ai/whisper/index.mjs +62 -5
- package/src/local-ai/whisper/install.mjs +72 -14
- package/src/local-ai/whisper/native/main.cpp +33 -2
- package/src/local-ai/whisper/openvino-build.mjs +138 -0
- package/src/mcp/stdio-server.mjs +579 -0
- package/src/native/portable-layout.mjs +3 -1
- package/src/toolchain.mjs +19 -8
|
@@ -13,7 +13,7 @@ methods. Importing the module and constructing an owner perform no I/O.
|
|
|
13
13
|
| Host | Default dataRoot | repositoriesRoot |
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| Windows | `%LOCALAPPDATA%/ArcaneData`, or `~/AppData/Local/ArcaneData` when that variable is empty | `<dataRoot>/Repos` |
|
|
16
|
-
| Linux | `$XDG_DATA_HOME/ArcaneData` when XDG_DATA_HOME is absolute, otherwise `~/.local/share/ArcaneData` | `<dataRoot>/Repos` |
|
|
16
|
+
| Linux | `$XDG_DATA_HOME/ArcaneData` when `XDG_DATA_HOME` is absolute, otherwise `~/.local/share/ArcaneData` | `<dataRoot>/Repos` |
|
|
17
17
|
| macOS | `~/Library/Application Support/ArcaneData` | `<dataRoot>/Repos` |
|
|
18
18
|
| Android or another adapted host | Explicit `dataRoot` supplied by the host, such as its app files directory followed by `ArcaneData` | `<dataRoot>/Repos` |
|
|
19
19
|
|
|
@@ -46,8 +46,8 @@ const status = await repository.status({signal});
|
|
|
46
46
|
await repository.close();
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
`createRepositoryWorkspace({name,directory,dataRoot,remote,branch,onEvent,run}={})`
|
|
50
|
-
returns `{directory,open,status,pull,push,close,drain,dispose}`. The `directory`
|
|
49
|
+
`createRepositoryWorkspace({name,directory,dataRoot,remote,branch,gitIdentity,onEvent,run}={})`
|
|
50
|
+
returns `{directory,open,status,pull,push,write,close,drain,dispose}`. The `directory`
|
|
51
51
|
property is the absolute selected working path.
|
|
52
52
|
|
|
53
53
|
- Omit `directory` to select `<repositoriesRoot>/<name>`. The application supplies
|
|
@@ -67,7 +67,8 @@ property is the absolute selected working path.
|
|
|
67
67
|
authentication remain with Git and the native host. The SDK adds no download,
|
|
68
68
|
credential store, polling, network retry or process supervisor.
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
The open/status/pull/push methods accept `{signal}={}` and return promises;
|
|
71
|
+
`write` accepts the complete file/message request described below:
|
|
71
72
|
|
|
72
73
|
| Method | Result and side effect |
|
|
73
74
|
|---|---|
|
|
@@ -75,6 +76,7 @@ All operation methods accept `{signal}={}` and return promises:
|
|
|
75
76
|
| `status` | Prepares the checkout if needed, then returns the existing `repositoryStatus` result unchanged. |
|
|
76
77
|
| `pull` | Prepares the checkout if needed, then runs the existing clean-checkout, fast-forward-only `repositoryPull` operation unchanged. |
|
|
77
78
|
| `push` | Prepares the checkout if needed, then runs the existing `repositoryPush` operation unchanged, preserving its support for unrelated uncommitted working files. |
|
|
79
|
+
| `write` | Writes exact caller-selected text files, stages and commits only their literal paths, then performs one ordinary non-force push. Returns confirmed operation outcomes; see below. |
|
|
78
80
|
| `close`, `drain`, `dispose` | The same idempotent operation: stop accepting new calls and await accepted work and its process/event cleanup. They retain the repository on disk. |
|
|
79
81
|
|
|
80
82
|
Opening an existing repository never pulls, switches branches, resets, changes
|
|
@@ -85,6 +87,230 @@ A failed or cancelled clone reports the actual failure; any remaining directory
|
|
|
85
87
|
is retained for application-owned inspection. There is no automatic deletion or
|
|
86
88
|
destructive retry. Filesystem failures and complete Git diagnostics propagate.
|
|
87
89
|
|
|
90
|
+
## Git identity configuration
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
import {readGitIdentity, createRepositoryWorkspace} from 'arcane-os/core/repositories';
|
|
94
|
+
|
|
95
|
+
const defaults = await readGitIdentity({signal});
|
|
96
|
+
const observations = await readGitIdentity({directory: existingRepositoryDirectory, signal});
|
|
97
|
+
const repository = createRepositoryWorkspace({
|
|
98
|
+
name: 'moon-cheese-dispatches',
|
|
99
|
+
remote: applicationConnection.remote,
|
|
100
|
+
gitIdentity: {name: 'Moon Dispatcher', email: 'moon@example.invalid', username: 'moon-account'}
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`readGitIdentity({directory,signal,onEvent,run=runProcess}={})` reads only
|
|
105
|
+
`user.name`, `user.email` and `github.user`. It returns:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
{
|
|
109
|
+
global: {name, email, githubUser},
|
|
110
|
+
local: {name, email, githubUser} | null,
|
|
111
|
+
effective: {name, email, githubUser} | null
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Every observed field is the complete UTF-8 Git configuration string, including
|
|
116
|
+
an empty string, leading U+FEFF and embedded newlines, or `null` when unset.
|
|
117
|
+
Git can store values outside UTF-8; those produce
|
|
118
|
+
`ARCANE_GIT_IDENTITY_NOT_TEXT` instead of replacement characters. Global and
|
|
119
|
+
local observations select Git's corresponding file scopes and honor configured
|
|
120
|
+
includes. With an existing
|
|
121
|
+
repository `directory`, `effective` reads ordinary Git configuration in that
|
|
122
|
+
repository context, including system, global, local, worktree and command
|
|
123
|
+
configuration where applicable. Equal local and global values remain separate
|
|
124
|
+
observations; the SDK does not infer who wrote or owns a setting. The last
|
|
125
|
+
configured scalar value wins within each observation.
|
|
126
|
+
|
|
127
|
+
Without `directory`, only global configuration is read and `local`/`effective`
|
|
128
|
+
are `null`. Relative directories resolve from the process working directory.
|
|
129
|
+
Git retains its normal environment and conditional-include context; when no
|
|
130
|
+
directory is supplied, that context is the process working directory. These
|
|
131
|
+
are independent configuration observations, not a transaction or a claim about
|
|
132
|
+
the identity of a prior commit, environment-derived author, or authenticated
|
|
133
|
+
GitHub account. `github.user` is a non-secret configured default, not proof of
|
|
134
|
+
authentication.
|
|
135
|
+
|
|
136
|
+
One targeted Git command reads each requested scope. Independent observations
|
|
137
|
+
start concurrently and all accepted commands finish their process cleanup
|
|
138
|
+
before the reader settles. `signal` uses the existing process owner; the shared
|
|
139
|
+
SDK event queue serializes `onEvent` delivery with its usual backpressure.
|
|
140
|
+
The reader consumes raw stdout through the existing process contract; stdout
|
|
141
|
+
is parsed as configuration rather than emitted as text events. Process
|
|
142
|
+
lifecycle and stderr events retain their ordinary route. A supplied `run`
|
|
143
|
+
adapter must honor that raw-output contract.
|
|
144
|
+
Git's no-match result produces unset fields; other process,
|
|
145
|
+
configuration, observer and cancellation failures remain complete. A single
|
|
146
|
+
failure retains its original object, code, cause and process `details`; the
|
|
147
|
+
reader adds complete captured stdout as the `rawStdout` Buffer on that error.
|
|
148
|
+
If the error already has that property or cannot accept it, a new error retains
|
|
149
|
+
the original as `cause`, preserves its code, process details and exit code, and
|
|
150
|
+
holds this observation's `rawStdout`. Original causal failures stay on that
|
|
151
|
+
original error; an attachment exception is retained as `attachmentError`.
|
|
152
|
+
An existing `rawStdout` property is never overwritten or invoked to read its value.
|
|
153
|
+
The process result's `stdout` remains `null` in raw mode, and its stderr and
|
|
154
|
+
other diagnostics remain intact. A decoding failure likewise carries its
|
|
155
|
+
original decoding `cause`, complete process `details` and `rawStdout`.
|
|
156
|
+
An observer failure already represented by a process error is not added again;
|
|
157
|
+
genuinely separate failures use `AggregateError.errors`, each retaining its
|
|
158
|
+
own diagnostics.
|
|
159
|
+
No configuration file is written and no credential helper is queried by this
|
|
160
|
+
reader. The application owns any saved non-secret defaults and repository
|
|
161
|
+
overrides through its existing preferences.
|
|
162
|
+
|
|
163
|
+
Both this workspace factory and
|
|
164
|
+
[`createGitTextSnapshot`](git-text-snapshot.md) accept optional
|
|
165
|
+
`gitIdentity:{name?,email?,username?}`. They capture supplied strings once during
|
|
166
|
+
I/O-free construction. Later edits to that object or a UI selection do not
|
|
167
|
+
change accepted work. Omitted or `undefined` fields preserve ordinary inherited
|
|
168
|
+
behavior; removing an application override means omitting that field on the
|
|
169
|
+
next owner, not changing unmanaged repository configuration. Empty strings are
|
|
170
|
+
passed explicitly to Git. Non-string values, NUL and text that cannot be
|
|
171
|
+
represented by the native process transport report `TypeError` without silently
|
|
172
|
+
rewriting the input.
|
|
173
|
+
|
|
174
|
+
An application's explicit "global author" choice differs from ordinary Git
|
|
175
|
+
inheritance. Pass the observed global `name` and `email` as selected strings to
|
|
176
|
+
override repository-local author values for those fields. A global `null` means
|
|
177
|
+
that field is unset, not a selected value: passing `null` reports `TypeError`,
|
|
178
|
+
and omitting the field allows normal inheritance, including repository-local
|
|
179
|
+
configuration. The application must describe that partial/inherited choice
|
|
180
|
+
accurately or obtain the missing value before presenting an all-global author
|
|
181
|
+
selection. An empty string is a distinct explicit value that Git may reject.
|
|
182
|
+
Changed application choices apply to future owners; accepted operations retain
|
|
183
|
+
their original selection and may finish without being discarded.
|
|
184
|
+
|
|
185
|
+
Each supplied name/email becomes command-local `-c user.name=...` or
|
|
186
|
+
`-c user.email=...` and the corresponding child-only `GIT_AUTHOR_*` and
|
|
187
|
+
`GIT_COMMITTER_*` fields. Those selected fields take precedence over inherited
|
|
188
|
+
author/committer settings and environment values; omitted fields, dates and
|
|
189
|
+
unrelated environment remain inherited. Git retains its ordinary commit
|
|
190
|
+
identity formatting and may reject an unusable identity. The SDK changes
|
|
191
|
+
neither `process.env` nor global/local Git files.
|
|
192
|
+
|
|
193
|
+
`username` supplies only command-local `credential.username`. Git's existing
|
|
194
|
+
credential helper and remote protocol still own actual authentication. A
|
|
195
|
+
URL-embedded username or helper behavior can affect the selected credential;
|
|
196
|
+
this option neither rewrites the remote nor selects an SSH account or proves a
|
|
197
|
+
GitHub login. No account enumeration, secret storage or `gh` dependency is added.
|
|
198
|
+
See Git's [configuration](https://git-scm.com/docs/git-config),
|
|
199
|
+
[author environment](https://git-scm.com/docs/git#_git_commits) and
|
|
200
|
+
[credential username](https://git-scm.com/docs/gitcredentials) contracts.
|
|
201
|
+
|
|
202
|
+
The selected settings accompany every workspace Git command, including clone,
|
|
203
|
+
pull, commit and push, and every bare-snapshot Git command, including init and
|
|
204
|
+
fetch. Existing arguments, content, output, errors, queue and cancellation
|
|
205
|
+
semantics remain unchanged. Other repository helpers and CLI cwd defaults keep
|
|
206
|
+
their existing behavior.
|
|
207
|
+
|
|
208
|
+
## Write, commit and push selected text
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
const result = await repository.write({
|
|
212
|
+
files: [{path: 'dispatches/moon-cheese.md', content: completeAuthoredText}],
|
|
213
|
+
message: authoredCommitMessage,
|
|
214
|
+
signal
|
|
215
|
+
});
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`write({files:[{path,content}],message,signal}={})` requires at least one explicit
|
|
219
|
+
file, a nonempty commit message and string content (including an empty string).
|
|
220
|
+
Paths name working files relative to this repository, not its root, outside
|
|
221
|
+
paths or Git-owned `.git` metadata. Strings must be representable as UTF-8;
|
|
222
|
+
native filenames cannot contain NUL. Incompatible input reports a `TypeError`
|
|
223
|
+
before any write, rather than replacing text. Content may contain NUL, BOM,
|
|
224
|
+
CRLF, leading/trailing whitespace and every ordinary Unicode character.
|
|
225
|
+
|
|
226
|
+
The method copies the selected records and their original strings synchronously
|
|
227
|
+
when called. Later changes to the caller's array, file records or selected UI
|
|
228
|
+
connection cannot alter accepted work. It does not freeze the caller's objects,
|
|
229
|
+
add document labels, normalize line endings, trim content or wrap documents.
|
|
230
|
+
The workspace's originally selected directory remains the operation owner.
|
|
231
|
+
|
|
232
|
+
After preparing that checkout, it creates needed parent directories and writes
|
|
233
|
+
each complete file using the ordinary native UTF-8 filesystem API. These are
|
|
234
|
+
caller-owned replacements, not an append-only policy or a multi-file atomic
|
|
235
|
+
transaction. Applications choose which paths and content may be replaced.
|
|
236
|
+
Ordinary filesystem behavior, including existing symlinks, remains with the
|
|
237
|
+
native host.
|
|
238
|
+
|
|
239
|
+
One `git --literal-pathspecs add -- <paths>` stages only those exact names.
|
|
240
|
+
One `git --literal-pathspecs commit --only --cleanup=verbatim --file - -- <paths>`
|
|
241
|
+
commits only those paths, leaving unrelated staged paths staged. The original
|
|
242
|
+
message is streamed unchanged through standard input. One ordinary `git push`
|
|
243
|
+
then uses that repository's existing remote/ref configuration, the optional
|
|
244
|
+
process-local identity selection above, existing credentials and hooks.
|
|
245
|
+
There is no implicit pull, branch switch, forced push,
|
|
246
|
+
hook bypass, automatic retry, rollback or reset. If Git reports no changes to
|
|
247
|
+
commit, that actual failure is returned; the SDK creates no empty commit.
|
|
248
|
+
These are Git's documented [selected-path commit](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---only)
|
|
249
|
+
and [literal pathspec](https://git-scm.com/docs/git#Documentation/git.txt---literal-pathspecs) semantics.
|
|
250
|
+
|
|
251
|
+
Existing Git attributes, clean filters, EOL settings and hooks continue to apply
|
|
252
|
+
when Git stages/commits content. The filesystem write preserves the original
|
|
253
|
+
text; this API does not claim that repository-configured filters leave Git blob
|
|
254
|
+
text identical. It preserves those settings. A push may also send existing history or other
|
|
255
|
+
refs selected by the repository's ordinary push configuration.
|
|
256
|
+
|
|
257
|
+
### Result and failure outcomes
|
|
258
|
+
|
|
259
|
+
Successful completion returns:
|
|
260
|
+
|
|
261
|
+
```text
|
|
262
|
+
{
|
|
263
|
+
directory,
|
|
264
|
+
state: 'pushed',
|
|
265
|
+
stage: 'complete',
|
|
266
|
+
paths: [originalSelectedPath, ...],
|
|
267
|
+
writtenPaths: [confirmedWrittenPath, ...],
|
|
268
|
+
written: true,
|
|
269
|
+
staged: true,
|
|
270
|
+
committed: true,
|
|
271
|
+
pushed: true,
|
|
272
|
+
outputs: [{stage: 'prepare'|'stage'|'commit'|'push', stdout, stderr, code?, signal?}, ...]
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Each output record retains complete stdout/stderr. `code` and the process
|
|
277
|
+
termination `signal` are included when a completed process result is available.
|
|
278
|
+
An in-progress write also records its current `path` on a failure outcome.
|
|
279
|
+
`writtenPaths` records successful filesystem writes in input order; `written`
|
|
280
|
+
becomes true only after every requested write succeeds. The other booleans
|
|
281
|
+
record successful Git command completion. **False means success is unconfirmed,
|
|
282
|
+
not that files, the index, HEAD or the remote certainly remained unchanged.**
|
|
283
|
+
|
|
284
|
+
- `local`: no successful commit or push has been confirmed. Inspect
|
|
285
|
+
`writtenPaths`, `written`, `staged` and `stage` for actual local progress.
|
|
286
|
+
- `committed`: Git completed the commit; no successful push has been confirmed.
|
|
287
|
+
Cancellation before push keeps this result rather than claiming delivery.
|
|
288
|
+
- `pushed`: Git reported successful completion of the push. A later observer
|
|
289
|
+
error retains that confirmed result while still reporting the observer error.
|
|
290
|
+
- `uncertain`: an attempted file write, commit or push did not supply successful
|
|
291
|
+
completion evidence. Partial files or index changes can remain, and a remote
|
|
292
|
+
can accept updates before a connection failure hides the acknowledgement.
|
|
293
|
+
Previously confirmed `writtenPaths`, `committed` or `pushed` evidence remains
|
|
294
|
+
present. A known pre-spawn failure does not invent a dispatched side effect.
|
|
295
|
+
|
|
296
|
+
After operation acceptance and execution begins, failures reject with an
|
|
297
|
+
`ArcaneError` whose `cause` is the original complete failure and whose `details`
|
|
298
|
+
is the outcome above. The code/message retain the original failure when
|
|
299
|
+
available, and nested process details remain available through its cause.
|
|
300
|
+
Input errors, a pre-aborted/queued-aborted request or a call after closing reject
|
|
301
|
+
before writer execution and have the existing TypeError/cancellation/closing
|
|
302
|
+
contract. No success is fabricated from an error string or callback.
|
|
303
|
+
|
|
304
|
+
Cancellation is checked before each subsequent filesystem/Git action. Active
|
|
305
|
+
Git cancellation drains through the existing process owner. Completion is
|
|
306
|
+
recorded before checking cancellation for the next action: an accepted commit
|
|
307
|
+
is retained if push has not begun, and an accepted push is retained if an
|
|
308
|
+
observer subsequently fails. Failed operations leave their actual files and
|
|
309
|
+
index state available for inspection; the application chooses recovery.
|
|
310
|
+
Await or retain the write promise and connect the workspace's terminal drain
|
|
311
|
+
to its Core service lifetime. The application still owns any decision to make
|
|
312
|
+
that Core method service-lifetime rather than request-lifetime work.
|
|
313
|
+
|
|
88
314
|
## Ownership, concurrency and shutdown
|
|
89
315
|
|
|
90
316
|
Calls targeting the same resolved path spelling in one Node process run in
|
|
@@ -107,6 +333,8 @@ The caller retains each operation's complete result or failure separately.
|
|
|
107
333
|
The cold path is one selected connection, one parent-directory creation and one
|
|
108
334
|
Git clone. Opening an existing checkout uses one read-only Git command. A
|
|
109
335
|
prepared owner's status/pull/push use their existing repository operation graph.
|
|
336
|
+
An accepted writer uses one filesystem write per explicitly selected file,
|
|
337
|
+
then one add, one commit and one push, stopping at the first failure.
|
|
110
338
|
There is no scan across applications, connections, models or platforms. Git
|
|
111
339
|
progress, process-starting/completion, heartbeat and cancellation events use
|
|
112
340
|
the existing `onEvent` owner with complete output and backpressure.
|
|
@@ -33,12 +33,26 @@ policy stable for the lifetime of its snapshot owner.
|
|
|
33
33
|
|
|
34
34
|
## API and lifecycle
|
|
35
35
|
|
|
36
|
-
`createGitTextSnapshot({cacheDirectory,remote,ref,selectPath,onEvent,run})`
|
|
36
|
+
`createGitTextSnapshot({cacheDirectory,remote,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 `gitIdentity:{name?,email?,username?}` uses the shared
|
|
43
|
+
[Git identity configuration contract](core-repositories.md#git-identity-configuration).
|
|
44
|
+
Supplied strings are captured during construction and accompany every Git
|
|
45
|
+
command, including bare initialization and fetch, without changing the remote,
|
|
46
|
+
ref, config files or process environment. Explicit name/email use command-local
|
|
47
|
+
configuration and child-only author/committer fields; omitted fields remain
|
|
48
|
+
inherited. `username` is only Git's credential username hint, not authenticated
|
|
49
|
+
account proof or SSH account selection. Read separate global/local/effective
|
|
50
|
+
configuration through `readGitIdentity` from `arcane-os/core/repositories`;
|
|
51
|
+
the reader also accepts an existing bare cache directory. Applications retain
|
|
52
|
+
saved non-secret choices and per-connection overrides. Identity selection adds
|
|
53
|
+
no process or query to refresh and does not attach a caller's abort to shared
|
|
54
|
+
acquisition.
|
|
55
|
+
|
|
42
56
|
- `refresh({signal}={})` fetches the selected ref and returns
|
|
43
57
|
`{revision,files:[{path,content}]}`. `revision` is Git's opaque selected commit
|
|
44
58
|
name, not an SDK integrity record. Every file comes from that exact revision,
|
|
@@ -1,17 +1,143 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"sdkVersion": "0.
|
|
3
|
+
"sdkVersion": "0.65.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",
|
|
7
7
|
"moduleSystem": "ESM"
|
|
8
8
|
},
|
|
9
|
-
"memberCount":
|
|
9
|
+
"memberCount": 290,
|
|
10
10
|
"runtimeSubpathPatterns": {
|
|
11
11
|
"arcane-os/modules/*": "./runtime/arcane/modules/*",
|
|
12
12
|
"arcane-os/entities/*": "./runtime/arcane/entities/*"
|
|
13
13
|
},
|
|
14
14
|
"members": [
|
|
15
|
+
{
|
|
16
|
+
"id": "local-ai-whisper:createWhisperRuntime",
|
|
17
|
+
"name": "createWhisperRuntime",
|
|
18
|
+
"displayName": "createWhisperRuntime()",
|
|
19
|
+
"kind": "function",
|
|
20
|
+
"signature": "createWhisperRuntime({runtime,prepare,modelId,temporaryDirectory,onEvent}={})",
|
|
21
|
+
"entrypoints": ["arcane-os/local-ai/whisper"],
|
|
22
|
+
"primaryImport": "arcane-os/local-ai/whisper",
|
|
23
|
+
"group": "Core native speech",
|
|
24
|
+
"summary": "Retains a selected native Whisper helper/model across complete recordings with actual correlated recovery and joined cancellation.",
|
|
25
|
+
"availability": "Node with prepared matching helper, Whisper libraries, decoder and model; Android needs host process adaptation",
|
|
26
|
+
"protocol": "Persistent first-party native helper with replaying whisper.state and complete transcription results",
|
|
27
|
+
"normalization": "Returns current/subscribe/load/transcribe/unload/close; preserves complete original media and text/segment results; one accepted transcription, exact requestId control metadata, eligible auto GPU-to-CPU recovery once, truthful unloaded recovery and terminal errors, joined decoder/helper cleanup"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "local-ai-whisper:default",
|
|
31
|
+
"name": "default",
|
|
32
|
+
"displayName": "createWhisperRuntime default export",
|
|
33
|
+
"kind": "function",
|
|
34
|
+
"signature": "default as createWhisperRuntime",
|
|
35
|
+
"entrypoints": ["arcane-os/local-ai/whisper"],
|
|
36
|
+
"primaryImport": "arcane-os/local-ai/whisper",
|
|
37
|
+
"group": "Core native speech",
|
|
38
|
+
"summary": "Default binding for the same retained native Whisper engine factory.",
|
|
39
|
+
"availability": "Node with the matching prepared native resources",
|
|
40
|
+
"protocol": "Native Whisper engine lifecycle",
|
|
41
|
+
"normalization": "Binding identity equals the named createWhisperRuntime export"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "local-ai-whisper-build:buildWhisperHelper",
|
|
45
|
+
"name": "buildWhisperHelper",
|
|
46
|
+
"displayName": "buildWhisperHelper()",
|
|
47
|
+
"kind": "function",
|
|
48
|
+
"signature": "async buildWhisperHelper({runtime,outputRoot,cmake='cmake',generator,cmakeArgs=[],env,signal,onEvent}={})",
|
|
49
|
+
"entrypoints": ["arcane-os/local-ai/whisper/build"],
|
|
50
|
+
"primaryImport": "arcane-os/local-ai/whisper/build",
|
|
51
|
+
"group": "Core native speech",
|
|
52
|
+
"summary": "Builds and installs the first-party persistent helper against matching prepared Whisper headers and runtime libraries.",
|
|
53
|
+
"availability": "Node with installed CMake/C++17 toolchain matching the selected platform and architecture",
|
|
54
|
+
"protocol": "Owned configure/build/install process lifecycle",
|
|
55
|
+
"normalization": "Returns platform/architecture/root/executable/runtimeDirectory and complete configure/compile/install diagnostics; preserves cancellation and process failures, installs no model or toolchain, performs no inference"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "local-ai-whisper-openvino-build:buildWhisperOpenVinoRuntime",
|
|
59
|
+
"name": "buildWhisperOpenVinoRuntime",
|
|
60
|
+
"displayName": "buildWhisperOpenVinoRuntime()",
|
|
61
|
+
"kind": "function",
|
|
62
|
+
"signature": "async buildWhisperOpenVinoRuntime({sourceDirectory,openvinoDirectory,cudaDirectory,outputRoot,cmake='cmake',generator,cmakeArgs=[],env,signal,onEvent}={})",
|
|
63
|
+
"entrypoints": ["arcane-os/local-ai/whisper/openvino-build"],
|
|
64
|
+
"primaryImport": "arcane-os/local-ai/whisper/openvino-build",
|
|
65
|
+
"group": "Core native speech",
|
|
66
|
+
"summary": "Produces the optional Intel NPU encoder runtime from installed matching Whisper/OpenVINO sources and an existing Windows x64 toolchain.",
|
|
67
|
+
"availability": "Windows x64 Node with Whisper 1.9.4 source, OpenVINO 2026.3.1 development tree and compatible CMake/MSVC; other platform distributions require separate native producers",
|
|
68
|
+
"protocol": "Owned configure/build process lifecycle and complete native runtime assembly",
|
|
69
|
+
"normalization": "Returns version/openvinoVersion/platform/architecture/encoder/backend/backends/root/directory/libraryDirectory/copied sourceDirectory and complete configure/compile diagnostics; retains NPU/CPU and optional supplied CUDA libraries plus notices, preserves process failures and cancellation, installs no model, driver or toolchain"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "codex-app-server:createCodexAppServerSession",
|
|
73
|
+
"name": "createCodexAppServerSession",
|
|
74
|
+
"displayName": "createCodexAppServerSession()",
|
|
75
|
+
"kind": "function",
|
|
76
|
+
"signature": "createCodexAppServerSession({executable,args,cwd,env,clientInfo,capabilities}={})",
|
|
77
|
+
"entrypoints": ["arcane-os/codex/app-server"],
|
|
78
|
+
"primaryImport": "arcane-os/codex/app-server",
|
|
79
|
+
"group": "Native Codex sessions",
|
|
80
|
+
"summary": "Creates an explicit native Codex App Server JSONL session without starting its process until connect.",
|
|
81
|
+
"availability": "Node with caller-selected native executable on Windows, Linux and macOS; Android requires host process adaptation",
|
|
82
|
+
"protocol": "Native Codex App Server JSONL",
|
|
83
|
+
"normalization": "Complete request/result/notification objects; ordered live delta/item callbacks, actual terminal turn outcomes and exact stored-turn recovery. Server requests retain real IDs and explicit replies. No automatic thread selection, retry, approval or desktop-task attachment."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "codex-app-server:openCodexAppServerSession",
|
|
87
|
+
"name": "openCodexAppServerSession",
|
|
88
|
+
"displayName": "openCodexAppServerSession()",
|
|
89
|
+
"kind": "function",
|
|
90
|
+
"signature": "async openCodexAppServerSession(options)",
|
|
91
|
+
"entrypoints": ["arcane-os/codex/app-server"],
|
|
92
|
+
"primaryImport": "arcane-os/codex/app-server",
|
|
93
|
+
"group": "Native Codex sessions",
|
|
94
|
+
"summary": "Creates and connects the same explicit native session, disposing it before rejecting failed initialization.",
|
|
95
|
+
"availability": "Node with caller-selected native Codex executable",
|
|
96
|
+
"protocol": "Native Codex App Server JSONL",
|
|
97
|
+
"normalization": "Returns the connected session; creates or resumes no thread and changes no provider or authentication selection."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "mcp-stdio:createMcpStdioServer",
|
|
101
|
+
"name": "createMcpStdioServer",
|
|
102
|
+
"displayName": "createMcpStdioServer()",
|
|
103
|
+
"kind": "function",
|
|
104
|
+
"signature": "createMcpStdioServer({serverInfo,instructions,tools=[],resources=[],onDiagnostic}={})",
|
|
105
|
+
"entrypoints": ["arcane-os/mcp/stdio"],
|
|
106
|
+
"primaryImport": "arcane-os/mcp/stdio",
|
|
107
|
+
"group": "MCP STDIO",
|
|
108
|
+
"summary": "Owns one MCP STDIO session for caller-authored tools and static resources.",
|
|
109
|
+
"availability": "Node streams on Windows, Linux and macOS; Android requires host adaptation",
|
|
110
|
+
"protocol": "MCP 2025-11-25 initialize-era JSON-RPC newline transport",
|
|
111
|
+
"normalization": "Explicit CallToolResult/ReadResourceResult preserve complete content. Returns start, cancel, drain, close and closed; concurrent handlers, ordered output, cooperative cancellation and graceful EOF drain. No process launch or application-service ownership."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "mcp-stdio:MCP_PROTOCOL_VERSION",
|
|
115
|
+
"name": "MCP_PROTOCOL_VERSION",
|
|
116
|
+
"displayName": "MCP_PROTOCOL_VERSION",
|
|
117
|
+
"kind": "constant",
|
|
118
|
+
"signature": "MCP_PROTOCOL_VERSION",
|
|
119
|
+
"entrypoints": ["arcane-os/mcp/stdio"],
|
|
120
|
+
"primaryImport": "arcane-os/mcp/stdio",
|
|
121
|
+
"group": "MCP STDIO",
|
|
122
|
+
"summary": "The explicit supported MCP initialization profile, 2025-11-25.",
|
|
123
|
+
"availability": "Node",
|
|
124
|
+
"protocol": "MCP initialization version negotiation",
|
|
125
|
+
"normalization": "Later profiles and optional unimplemented capabilities are not implied."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "mcp-stdio:McpProtocolError",
|
|
129
|
+
"name": "McpProtocolError",
|
|
130
|
+
"displayName": "McpProtocolError",
|
|
131
|
+
"kind": "class",
|
|
132
|
+
"signature": "new McpProtocolError(code,message,data)",
|
|
133
|
+
"entrypoints": ["arcane-os/mcp/stdio"],
|
|
134
|
+
"primaryImport": "arcane-os/mcp/stdio",
|
|
135
|
+
"group": "MCP STDIO",
|
|
136
|
+
"summary": "Represents an explicit JSON-RPC failure with complete message and optional data.",
|
|
137
|
+
"availability": "Node",
|
|
138
|
+
"protocol": "JSON-RPC error object",
|
|
139
|
+
"normalization": "Preserves code, message and supplied data; ordinary tool domain failures use CallToolResult.isError."
|
|
140
|
+
},
|
|
15
141
|
{
|
|
16
142
|
"id": "core-repositories:resolveArcaneDataPaths",
|
|
17
143
|
"name": "resolveArcaneDataPaths",
|
|
@@ -31,14 +157,28 @@
|
|
|
31
157
|
"name": "createRepositoryWorkspace",
|
|
32
158
|
"displayName": "createRepositoryWorkspace()",
|
|
33
159
|
"kind": "function",
|
|
34
|
-
"signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,branch,onEvent,run=runProcess}={})",
|
|
160
|
+
"signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,branch,gitIdentity,onEvent,run=runProcess}={})",
|
|
35
161
|
"entrypoints": ["arcane-os/core/repositories"],
|
|
36
162
|
"primaryImport": "arcane-os/core/repositories",
|
|
37
163
|
"group": "Native repository workspaces",
|
|
38
164
|
"summary": "Owns one selected native working checkout with ArcaneData/Repos defaults and existing Git/process lifecycle.",
|
|
39
165
|
"availability": "Node with Git on Windows, Linux and macOS; Android requires host process adaptation",
|
|
40
166
|
"protocol": "Git working repository and SDK process adapter",
|
|
41
|
-
"normalization": "Returns directory, open, status, pull, push and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are inspected without rewriting, resetting or pulling. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work."
|
|
167
|
+
"normalization": "Returns directory, open, status, pull, push, write and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are inspected without rewriting, resetting or pulling. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work. write snapshots exact selected text and paths, writes files, stages/commits only literal owned paths and non-force pushes, preserving unrelated staged files and ordinary Git filters. Complete outputs and causal failures retain confirmed local/committed/pushed and uncertain outcomes. Optional gitIdentity captures name/email/username for child Git operations only; omitted fields remain inherited and no config file is written."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"id": "core-repositories:readGitIdentity",
|
|
171
|
+
"name": "readGitIdentity",
|
|
172
|
+
"displayName": "readGitIdentity()",
|
|
173
|
+
"kind": "function",
|
|
174
|
+
"signature": "readGitIdentity({directory,signal,onEvent,run=runProcess}={})",
|
|
175
|
+
"entrypoints": ["arcane-os/core/repositories"],
|
|
176
|
+
"primaryImport": "arcane-os/core/repositories",
|
|
177
|
+
"group": "Native repository workspaces",
|
|
178
|
+
"summary": "Reads separate global, repository-local and effective non-secret Git identity configuration.",
|
|
179
|
+
"availability": "Node with Git on Windows, Linux and macOS; Android requires host process adaptation",
|
|
180
|
+
"protocol": "Git config NUL-delimited transport through the SDK process adapter",
|
|
181
|
+
"normalization": "Returns {global,local,effective} observations with complete name/email/githubUser strings or null when unset. Empty strings and configured includes are preserved. Without directory only global is observed and local/effective are null. Concurrent scope reads join process cleanup; complete failures propagate singly or through AggregateError. Changes no config files and claims no authenticated account or environment-resolved author."
|
|
42
182
|
},
|
|
43
183
|
{
|
|
44
184
|
"id": "core-speech:createSpeechService",
|
|
@@ -199,14 +339,14 @@
|
|
|
199
339
|
"name": "createGitTextSnapshot",
|
|
200
340
|
"displayName": "createGitTextSnapshot()",
|
|
201
341
|
"kind": "function",
|
|
202
|
-
"signature": "createGitTextSnapshot({cacheDirectory,remote,ref,selectPath,onEvent,run=runProcess}={})",
|
|
342
|
+
"signature": "createGitTextSnapshot({cacheDirectory,remote,ref,selectPath,gitIdentity,onEvent,run=runProcess}={})",
|
|
203
343
|
"entrypoints": ["arcane-os"],
|
|
204
344
|
"primaryImport": "arcane-os",
|
|
205
345
|
"group": "Workspace, doctor, repository, and server",
|
|
206
346
|
"summary": "Reads complete selected text from one fetched revision using a dedicated bare Git object cache and batched retrieval.",
|
|
207
347
|
"availability": "Node with Git; Android requires a host supplying Git/process capability",
|
|
208
348
|
"protocol": "Git tree and batched blob transport through the shared process owner",
|
|
209
|
-
"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. See git-text-snapshot.md."
|
|
349
|
+
"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."
|
|
210
350
|
},
|
|
211
351
|
{
|
|
212
352
|
"id": "diarization:createDiarization",
|
|
@@ -4082,6 +4222,34 @@
|
|
|
4082
4222
|
"protocol": "arcane/1 renderer client ownership",
|
|
4083
4223
|
"normalization": "Recognizes ESM and classic SDK installation identity; returns null after close or terminal failure and does not treat a foreign Arcane facade as an SDK client"
|
|
4084
4224
|
},
|
|
4225
|
+
{
|
|
4226
|
+
"id": "core-client:subscribeCoreClient",
|
|
4227
|
+
"name": "subscribeCoreClient",
|
|
4228
|
+
"displayName": "subscribeCoreClient()",
|
|
4229
|
+
"kind": "function",
|
|
4230
|
+
"signature": "subscribeCoreClient(listener,{global=globalThis,emitCurrent=true,signal}={})",
|
|
4231
|
+
"entrypoints": ["arcane-os/core/client"],
|
|
4232
|
+
"primaryImport": "arcane-os/core/client",
|
|
4233
|
+
"group": "Core browser client",
|
|
4234
|
+
"summary": "Observes exact SDK client installation and retirement with current-state replay without creating a transport.",
|
|
4235
|
+
"availability": "Browser and native WebView JavaScript hosts",
|
|
4236
|
+
"protocol": "Core client installation lifecycle",
|
|
4237
|
+
"normalization": "Preserves client and error identities; reports current, installed, closed and transport-failed with previousClient; returns idempotent unsubscribe and supports AbortSignal. Installation does not imply runtime, service or model readiness"
|
|
4238
|
+
},
|
|
4239
|
+
{
|
|
4240
|
+
"id": "core-development:createDevelopmentCore",
|
|
4241
|
+
"name": "createDevelopmentCore",
|
|
4242
|
+
"displayName": "createDevelopmentCore()",
|
|
4243
|
+
"kind": "function",
|
|
4244
|
+
"signature": "createDevelopmentCore({appRoot=process.cwd(),application,version,services=[],serviceModules=[],context={},getReplayEvents,signal,onEvent}={})",
|
|
4245
|
+
"entrypoints": ["arcane-os/core/development", "arcane-os"],
|
|
4246
|
+
"primaryImport": "arcane-os/core/development",
|
|
4247
|
+
"group": "Core source development",
|
|
4248
|
+
"summary": "Composes application Core services and document-owned HTTP/SSE transport independently of local AI.",
|
|
4249
|
+
"availability": "Node on Windows, Linux and macOS; Android requires host adaptation",
|
|
4250
|
+
"protocol": "arcane/1 over source-development HTTP/SSE",
|
|
4251
|
+
"normalization": "Returns ready, handler, current and close synchronously; preserves factory options and explicit context, current lifecycle replay, correlated responses and chunks, document cancellation, accepted service work and owned drain. Explicit bootstrap does not block rendering or start application processes"
|
|
4252
|
+
},
|
|
4085
4253
|
{
|
|
4086
4254
|
"id": "core-classic-source:createCoreClassicSource",
|
|
4087
4255
|
"name": "createCoreClassicSource",
|
|
@@ -120,6 +120,7 @@
|
|
|
120
120
|
"AI_RUNTIME_STARTUP_EVENT",
|
|
121
121
|
"AI_RUNTIME_STATES",
|
|
122
122
|
"AI_RUNTIME_STATE_EVENT",
|
|
123
|
+
"continuesAIRuntimeOperation",
|
|
123
124
|
"getAIRuntimeState",
|
|
124
125
|
"publishAIRuntimeRoleState",
|
|
125
126
|
"publishAIRuntimeRolesState",
|
|
@@ -131,8 +132,8 @@
|
|
|
131
132
|
"summary": "Sticky mutable LLM, speech-to-text, and text-to-speech lifecycle snapshots, intents, subscriptions, and startup-settlement barriers.",
|
|
132
133
|
"availability": "Cross-host in-process state contract; actual role readiness remains provider specific",
|
|
133
134
|
"protocol": "arcane-ai-runtime-state/1 over the per-realm globalThis.arcaneEvents authority",
|
|
134
|
-
"normalization": "Closed monotonic sticky role snapshots, transient lifecycle intents, synchronous current-state replay, AbortSignal cleanup, and startup settlement are normalized;
|
|
135
|
-
"surface": "Protocol/event/role/state constants; snapshot, state subscribe/publish, intent request/subscribe, and `startAIRuntime({startMuted,startTranscription,signal})` returning `{barrier,settled,cancel}`."
|
|
135
|
+
"normalization": "Closed monotonic sticky role snapshots, transient lifecycle intents, synchronous current-state replay, AbortSignal cleanup, and startup settlement are normalized; unloaded recovery/error may retain the exact busy operation until settlement, without readiness for new inference.",
|
|
136
|
+
"surface": "Protocol/event/role/state constants; snapshot, state subscribe/publish, intent request/subscribe, continuesAIRuntimeOperation(previous,current,operationId) for the real continuing runtime operation, and `startAIRuntime({startMuted,startTranscription,signal})` returning `{barrier,settled,cancel}`."
|
|
136
137
|
},
|
|
137
138
|
{
|
|
138
139
|
"file": "runtime/arcane/modules/AnsiText.js",
|
|
@@ -1012,13 +1013,14 @@
|
|
|
1012
1013
|
"kind": "esm",
|
|
1013
1014
|
"exports": [
|
|
1014
1015
|
"isOllamaModelIdentifier",
|
|
1015
|
-
"normalizeOllamaModelIdentifier"
|
|
1016
|
+
"normalizeOllamaModelIdentifier",
|
|
1017
|
+
"sameOllamaModelIdentifier"
|
|
1016
1018
|
],
|
|
1017
|
-
"summary": "
|
|
1019
|
+
"summary": "Recognizes Ollama model identifier syntax and compares ordinary resident-model aliases without changing requests.",
|
|
1018
1020
|
"availability": "Cross-host",
|
|
1019
1021
|
"protocol": "In-process only",
|
|
1020
|
-
"normalization": "
|
|
1021
|
-
"surface": "`normalizeOllamaModelIdentifier()`, `isOllamaModelIdentifier()`."
|
|
1022
|
+
"normalization": "Exact identifier/null or boolean results; alias comparison applies Ollama's default registry, namespace and tag without changing either input.",
|
|
1023
|
+
"surface": "`normalizeOllamaModelIdentifier()`, `isOllamaModelIdentifier()`, `sameOllamaModelIdentifier(left, right)`."
|
|
1022
1024
|
},
|
|
1023
1025
|
{
|
|
1024
1026
|
"file": "runtime/arcane/modules/OllamaSettings.js",
|