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.
Files changed (50) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +1 -1
  3. package/browser-runtime/ai/browser-decisions.mjs +3 -2
  4. package/browser-runtime/ai/decision-runtime.mjs +14 -24
  5. package/browser-runtime/core/client.mjs +62 -5
  6. package/docs/guides/native-whisper-openvino.md +334 -0
  7. package/docs/publishing.md +39 -0
  8. package/docs/reference/README.md +11 -1
  9. package/docs/reference/ai/browser-decisions.md +7 -4
  10. package/docs/reference/arcane-ollama.md +1 -1
  11. package/docs/reference/codex-app-server.md +269 -0
  12. package/docs/reference/core-client.md +60 -2
  13. package/docs/reference/core-development.md +157 -0
  14. package/docs/reference/core-native-packaging.md +13 -0
  15. package/docs/reference/core-repositories.md +232 -4
  16. package/docs/reference/git-text-snapshot.md +15 -1
  17. package/docs/reference/inventory/package-api.json +174 -6
  18. package/docs/reference/inventory/runtime-modules.json +8 -6
  19. package/docs/reference/local-ai.md +80 -3
  20. package/docs/reference/local-image-generation.md +5 -0
  21. package/docs/reference/local-image-sdxl.md +1 -1
  22. package/docs/reference/local-whisper.md +7 -1
  23. package/docs/reference/mcp-stdio.md +263 -0
  24. package/docs/reference/native-speech.md +6 -0
  25. package/docs/reference/runtime-components.md +18 -1
  26. package/docs/reference/runtime-modules.md +10 -2
  27. package/docs/reference/sdk-api.md +346 -4
  28. package/package.json +6 -2
  29. package/runtime/arcane/modules/AI.js +156 -13
  30. package/runtime/arcane/modules/Ollama.js +1 -1
  31. package/runtime/arcane/modules/OllamaModelIdentifier.js +13 -0
  32. package/schemas/arcane-app.schema.json +8 -1
  33. package/schemas/arcane-package.schema.json +8 -1
  34. package/src/codex/app-server.mjs +845 -0
  35. package/src/core/development.mjs +457 -0
  36. package/src/core/repositories.mjs +178 -9
  37. package/src/core/services/local-ai.mjs +80 -10
  38. package/src/dev-server.mjs +3 -2
  39. package/src/git-identity.mjs +132 -0
  40. package/src/git-text-snapshot.mjs +5 -3
  41. package/src/index.mjs +1 -0
  42. package/src/local-ai/dev.mjs +80 -426
  43. package/src/local-ai/whisper/config.mjs +31 -3
  44. package/src/local-ai/whisper/index.mjs +62 -5
  45. package/src/local-ai/whisper/install.mjs +72 -14
  46. package/src/local-ai/whisper/native/main.cpp +33 -2
  47. package/src/local-ai/whisper/openvino-build.mjs +138 -0
  48. package/src/mcp/stdio-server.mjs +579 -0
  49. package/src/native/portable-layout.mjs +3 -1
  50. 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
- All operation methods accept `{signal}={}` and return promises:
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.63.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": 278,
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; events report state but grant no authority.",
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": "Validates and canonicalizes the syntax of Ollama model identifiers without granting model admission.",
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": "Fully normalized string/boolean result.",
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",