arcane-os 0.54.1 → 0.55.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.
@@ -0,0 +1,149 @@
1
+ # Portable Core packaging
2
+
3
+ `arcane-os/native/portable-provider` owns the portable native payload in the SDK
4
+ package. It does not load Arcane OS source, choose models, download a runtime,
5
+ or compile an executable. Windows, Linux and macOS hosts may compose this
6
+ Node-based payload; Android needs its separate native host adaptation. The
7
+ current CLI's portable platform selections remain Windows and Linux. A portable
8
+ artifact is not a Windows executable, Linux package or Android application.
9
+
10
+ `loadArcaneNativeProvider({target:'portable'})` selects the installed SDK provider
11
+ without an `arcaneRoot`. Supplying an explicit `arcaneRoot` retains the existing
12
+ checkout-provider route. Other native targets remain with their actual platform
13
+ providers; the loader does not substitute this payload for an unavailable host.
14
+
15
+ ## Provider and selected input
16
+
17
+ The default export and `arcaneNativeBuilderProvider` are the same provider.
18
+ `createPortableNativeProvider({services:[]})` creates one with application-owned
19
+ service configuration. All implement `arcane-native-builder/1`:
20
+
21
+ - `describe()` identifies the portable target and `executable:false`.
22
+ - `doctor({targetRequest, signal, onEvent})` reports missing SDK Core source files.
23
+ - `prepare({targetRequest, signal, onEvent})` returns the selected SDK version and
24
+ package root. Neither operation builds or imports application services.
25
+ - `build(request)` assembles one selected release and its explicit dependencies.
26
+ - `verify({artifact, targetRequest, signal, onEvent})` explicitly reads its semantic
27
+ manifest and observes that the listed output files exist. It does not execute
28
+ a host or establish native behavior. Build does not implicitly run verification.
29
+ - `run()` reports `ARCANE_NATIVE_RUN_UNSUPPORTED`; portable is not an executable.
30
+
31
+ Use the existing `createNativeBuildPlan()` / `executeNativeBuildPlan()` public
32
+ contract. Build receives `appDescriptor`, `appReleaseRoot`, `release`,
33
+ `readReleaseFile`, `dependencies`, `minimumCoreVersion`, `protectedRoots`,
34
+ `outputRoot`, `targetRequest`, `selectedSdk`, `signal` and `onEvent`. Dependencies provide their
35
+ `appId`, `releaseRoot`, `release` and `readReleaseFile`. The selected release's
36
+ `files` inventory is copied completely through its supplied reader. Direct
37
+ callers may supply the release root for ordinary file reads instead.
38
+
39
+ Both the current flat signing selection and the CLI's nested signing selection
40
+ are accepted by the planning boundary. Portable assembly adds no signing,
41
+ receipts, hashes, content limits or security policy. The package-relative source
42
+ root comes from the provider module's own location, not `toolchainRoot` or an
43
+ Arcane OS machine bundle.
44
+
45
+ ## Output and host contract
46
+
47
+ Each build creates a fresh `arcane-portable-*` directory beneath `outputRoot`.
48
+ The result is `{app, target, manifest}`, with its actual directory at
49
+ `target.rootDir`. Existing artifacts are preserved. Cancellation or a failed
50
+ assembly removes only that build's newly created directory. Source/release roots
51
+ cannot be overwritten with generated output.
52
+
53
+ The selected app is copied unchanged under `app/`. Dependencies are copied
54
+ unchanged under `dependencies/<index>/`; the manifest relates each directory to
55
+ its actual app identifier and selected release. No HTML, payload, line ending,
56
+ application import, or base URL is rewritten by this provider. Dependency
57
+ navigation and service imports remain explicit host/application composition;
58
+ the payload does not invent cross-app routes.
59
+
60
+ `node_modules/arcane-os/` contains the SDK consumer source, runtime, schemas,
61
+ commands, package metadata and legal files. Its installed published runtime
62
+ dependency tree is included with licenses and actual nested dependency
63
+ resolution. The generated Core entry uses the ordinary public
64
+ `arcane-os/core/host` import. Application service modules can use those public
65
+ SDK exports through Node's normal package resolution. Existing app-owned
66
+ `node_modules` content remains authoritative where the selected app supplies it;
67
+ its own dependency completeness remains part of that app's selected release.
68
+ For the direct installed browser layout, the ordinary native selection also
69
+ supplies `selectedSdk:{packageRoot,packageSource}` from the application's actual
70
+ installed SDK. Assembly completes its browser-only package directory with
71
+ missing files and dependencies from that selected package, preserving every
72
+ selected file. It never fills an older projection with the builder's newer
73
+ package metadata. An already-supplied `package.json` remains app-owned, without
74
+ replacement or automatic completion. `manifest.appSdk` identifies this app
75
+ package separately from the builder SDK. Low-level callers composing services
76
+ with a partial direct SDK projection must supply the actual selected package
77
+ source; a file inventory alone does not identify its version or Node exports.
78
+ No dependency installer or package script runs. No OS model, Shell, Provisioner,
79
+ catalog, prompt, or native compiler is added.
80
+
81
+ The semantic `arcane-native.json` names the web root, selected start URL, Node
82
+ Core entry, classic client, dependencies and complete file inventory. A native
83
+ host must:
84
+
85
+ 1. Mount `app/` at the root of its local application URL origin, preserving the
86
+ selected start path and all navigable documents.
87
+ 2. Inject `runtime/arcane-api.js` at document creation. It is produced by the
88
+ canonical `createCoreClassicSource()` generator, not a copied OS client.
89
+ 3. Start `runtime/arcane-core.mjs` with the host's supported Node runtime and
90
+ connect the existing framed stdin/stdout transport.
91
+ 4. Close input and await Core's drain before terminating the child process.
92
+
93
+ The selected release must contain one shared `sdk/event-manager.mjs` path,
94
+ possibly nested under its SDK payload directory, or the direct installed
95
+ `node_modules/<package-or-alias>/browser-runtime/event-manager.mjs` path.
96
+ The classic client imports that
97
+ same owner with an origin-root URL, including on nested pages. It does not create
98
+ a second event implementation. A plain file-URL launch without this host mapping
99
+ is not the native serving contract. No host is launched during packaging.
100
+
101
+ ## Explicit application services
102
+
103
+ Pass native service modules already included in the selected app release:
104
+
105
+ ```js
106
+ import {createPortableNativeProvider} from 'arcane-os/native/portable-provider';
107
+
108
+ const nativeBuilder = createPortableNativeProvider({
109
+ services: [{module:'native/moon-ledger.mjs', options:{ledgerName:'Cheese debts'}}]
110
+ });
111
+ ```
112
+
113
+ Each module default-exports a synchronous factory returning the existing Core
114
+ service definition. Its options must be JSON-serializable data. Module imports
115
+ and factories run only when the generated Core entry is launched, never during
116
+ packaging. Put asynchronous initialization in `start()`, not a top-level await
117
+ or asynchronous factory, so unrelated services and dispatcher readiness remain
118
+ independent. Factories own product configuration and any service dependencies;
119
+ the packager does not discover, install or execute them.
120
+
121
+ ```js
122
+ // native/moon-ledger.mjs, owned by the application
123
+ export default function createMoonLedger({ledgerName}) {
124
+ return {
125
+ name: 'moon-ledger',
126
+ methods: {
127
+ 'moon.describe': function describeLedger() {
128
+ return {name:ledgerName, message:'The cheese debts are astronomical.'};
129
+ }
130
+ }
131
+ };
132
+ }
133
+ ```
134
+
135
+ `startCoreHost({application, version, services, input, output, onError, signal})`
136
+ is also available directly from `arcane-os/core/host`. It returns the existing
137
+ stdio owner's `{runtime, closed, close}` without another lifecycle controller.
138
+ An optional abort signal invokes that same idempotent drain. Dispatcher readiness
139
+ does not wait for service/model readiness. Accepted `lifetime:'service'` work
140
+ survives renderer cancellation and is drained before shutdown. Errors remain
141
+ observable through `onError` and `closed`; no process is killed or forcibly exited.
142
+ See [the Core runtime contract](core-runtime.md) for request and service lifetime
143
+ details and [the client contract](core-client.md) for native bridge integration.
144
+
145
+ This source increment supplies portable assembly and service composition.
146
+ Desktop WebView executables, platform child-process ownership, Android dispatch
147
+ and executable build toolchains require their own completed adapters. Published
148
+ consumers must adopt the numeric package that includes this increment; a source
149
+ checkout or a successful source push is not that public package authority.
@@ -0,0 +1,175 @@
1
+ # Native Core runtime
2
+
3
+ The SDK owns the reusable native dispatcher and framed stdio transport.
4
+ The composing application or native host supplies its identity, version and
5
+ services. Product prompts, model selections, filesystem locations, host
6
+ privileges and application policy remain with that owner.
7
+
8
+ ```js
9
+ import {createCoreRuntime} from 'arcane-os/core/runtime';
10
+ import {startCoreStdio} from 'arcane-os/core/stdio';
11
+ import catalogStore from './catalog-store.mjs';
12
+
13
+ const runtime = createCoreRuntime({
14
+ application: {id: 'moon-cheese-catalog', name: 'Moon Cheese Catalog'},
15
+ version: '1.0.0',
16
+ services: [{
17
+ name: 'catalog',
18
+ methods: {
19
+ 'catalog.save': {
20
+ lifetime: 'service',
21
+ async handle(record) {
22
+ // catalogStore is supplied by this application's native owner.
23
+ return catalogStore.save(record);
24
+ }
25
+ }
26
+ },
27
+ async drain() {
28
+ await catalogStore.flush();
29
+ },
30
+ async dispose() {
31
+ await catalogStore.close();
32
+ }
33
+ }]
34
+ });
35
+
36
+ const transport = startCoreStdio({runtime});
37
+ await transport.closed;
38
+ ```
39
+
40
+ The example's store is an application dependency, not an SDK-created database.
41
+ The runtime passes each request's `parameters` to its registered handler
42
+ unchanged. It preserves complete results and diagnostic errors; it neither
43
+ selects product data nor supplies replacement results.
44
+
45
+ ## Registration and startup
46
+
47
+ `createCoreRuntime({application, version, services})` creates a dispatcher.
48
+ Supply the application's real descriptor and host release version. The built-in
49
+ `app.current` and `version.current` methods return those values; `system.ping`
50
+ returns `{ok:true}`. A ping establishes dispatcher responsiveness, not model,
51
+ service or application readiness.
52
+
53
+ `runtime.registerService({name, methods, start, drain, dispose})` registers one
54
+ native service. Method names are complete RPC names, such as `catalog.save`.
55
+ A method is either a handler function or `{handle, lifetime}`. A handler function
56
+ has request lifetime by default. Duplicate service or method names, including
57
+ the three built-in methods, are reported rather than replacing another owner.
58
+ Registration is a native composition API, not a browser command.
59
+
60
+ Registration returns `{ready, current}`. Reading `ready` starts that service and
61
+ returns its shared startup promise; `current()` exposes its state and actual
62
+ error. `runtime.start()` starts all registered services independently and returns
63
+ the current dispatcher state without waiting for them. A service registered
64
+ after startup starts independently as well. A method waits only for its own
65
+ service's startup before invoking its handler. State errors use the shared
66
+ complete diagnostic serialization; the startup promise retains its original
67
+ rejection value.
68
+
69
+ Each lifecycle hook receives `{application, service, emit}`. Each request handler
70
+ receives `(parameters, {application, service, emit, requestId, signal})`, with
71
+ `this` bound to its service definition. A hook or handler may publish a complete
72
+ service-owned event through `emit(event, data)`.
73
+
74
+ ## State and frames
75
+
76
+ `runtime.current()` returns dispatcher state, application, version, per-service
77
+ state/errors and active request identities, methods and lifetimes.
78
+ `runtime.subscribe(listener, {emitCurrent:true, signal})` immediately replays the
79
+ current state and then observes changes through the canonical SDK event owner.
80
+ It returns an unsubscribe function. `runtime.onFrame(listener, {signal})`
81
+ observes outgoing protocol frames and also returns an unsubscribe function.
82
+ Attach transport listeners before starting the runtime to observe initial frames.
83
+
84
+ The shared `arcane-os/core/contracts` module owns `CORE_PROTOCOL` (`arcane/1`),
85
+ `CoreError` and `serializeCoreError`. Requests are:
86
+
87
+ ```js
88
+ {
89
+ protocol: 'arcane/1',
90
+ type: 'request',
91
+ id: 'request-1',
92
+ method: 'catalog.save',
93
+ parameters: {name: 'Lunar cheddar', notes: 'Keep the complete supplied text.'}
94
+ }
95
+ ```
96
+
97
+ `await runtime.handle(frame)` returns and emits the correlated response:
98
+ `{protocol, type:'response', id, ok:true, result, time}` or
99
+ `{protocol, type:'response', id, ok:false, error, time}`. Framing and method
100
+ availability errors remain observable; unavailable services are not replaced
101
+ with browser behavior.
102
+
103
+ Events have `{protocol, type:'event', event, data, time}`:
104
+
105
+ - `core.ready`: the dispatcher is connected; service/model readiness is separate.
106
+ - `core.state`: the current complete runtime state.
107
+ - `core.service.state`: a service's name, state and serialized error when present.
108
+ - `core.error`: a lifecycle or transport diagnostic.
109
+
110
+ Service states are `registered`, `starting`, `ready`, `failed`, `draining` and
111
+ `closed`. Dispatcher states are `created`, `ready`, `draining` and `closed`.
112
+ Complete diagnostics belong in the host's developer-facing error handling, not
113
+ in ordinary chat history or a fabricated conversation turn.
114
+
115
+ ## Cancellation and shutdown
116
+
117
+ The `request.cancel` control names `requestId`; `requests.cancelAll` applies to
118
+ active request-lifetime operations. Cancellation is cooperative. The handler's
119
+ signal is aborted. An otherwise successful cancelled operation returns
120
+ `REQUEST_ABORTED` after its owned work settles; a handler's own rejection remains
121
+ the actual reported error. If startup is still pending, cancellation is checked before
122
+ the handler runs. A service that does not finish or respond to cancellation is
123
+ still unfinished; the SDK does not report a forced timeout as successful cleanup.
124
+
125
+ Use `lifetime:'service'` for accepted work, such as a save, that must survive a
126
+ renderer cancellation or disconnect. These operations are not aborted by the
127
+ request cancellation controls or by normal Core shutdown. The service still
128
+ owns its persistence, queueing and failure semantics.
129
+
130
+ `runtime.close()` is idempotent and retains the same completion promise. It stops
131
+ accepting new requests, cancels request-lifetime operations, waits for accepted
132
+ responses, then drains and disposes services. Independent services close
133
+ concurrently; each service's startup, drain and dispose remain ordered.
134
+ Shutdown errors remain complete and reject the close promise. A failed drain
135
+ does not prevent the service's dispose hook from running.
136
+
137
+ The final closed state is published before event subscriptions are released.
138
+ `current()` remains available afterward; the disposed runtime is not restarted.
139
+ The host must observe completion before terminating Core. The SDK does not call
140
+ `process.exit()`, kill a host or claim durability after an operating-system crash
141
+ or a host-forced termination.
142
+
143
+ ## Stdio transport
144
+
145
+ `startCoreStdio({runtime, input, output, onError})` attaches a runtime and starts
146
+ it. Streams default to `process.stdin` and `process.stdout`; diagnostics default
147
+ to `console.error`, leaving stdout for protocol frames. It returns
148
+ `{runtime, closed, close}`. Observe `closed` for final completion or failure.
149
+
150
+ Frames use the existing `Content-Length` header followed by UTF-8 JSON. Length
151
+ is transport-local framing only. `encodeCoreFrame(frame)` and
152
+ `createCoreFrameDecoder(onFrame)` are also exported for host adapters. The
153
+ decoder accepts fragmented or multiple frames through `push(chunk)`;
154
+ `finish()` reports an incomplete final frame rather than dropping it.
155
+
156
+ Requests dispatch concurrently. Outgoing frames preserve their queued order and
157
+ wait for each writable-stream callback. Input EOF starts runtime shutdown, waits
158
+ for accepted service work and queued output, and resolves `closed` afterward.
159
+ An input stream closed without its normal EOF event also initiates this drain;
160
+ an already ended or destroyed input is handled when attached. Transport failures
161
+ reach `onError` and reject `closed`. The transport detaches
162
+ its listeners and pauses its input; it does not end caller-owned output streams
163
+ or take ownership of the host process.
164
+
165
+ ## Platform and delivery boundary
166
+
167
+ These modules use portable Node and JavaScript facilities for Windows, Linux
168
+ and macOS native hosts. Android requires its native transport/host adaptation;
169
+ the module is not a Node runtime embedded inside a WebView. Browser callers use
170
+ the separate [Core client](core-client.md).
171
+
172
+ The dispatcher/transport sources are one part of Core extraction. They do not
173
+ by themselves replace existing native host bundles, platform adapters, provider
174
+ loading, packaging or OS composition. Those owners must adopt the selected
175
+ published SDK boundary and preserve their real shutdown and service lifecycles.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "sdkVersion": "0.51.1",
3
+ "sdkVersion": "0.55.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": 226,
9
+ "memberCount": 244,
10
10
  "runtimeSubpathPatterns": {
11
11
  "arcane-os/modules/*": "./runtime/arcane/modules/*",
12
12
  "arcane-os/entities/*": "./runtime/arcane/entities/*"
@@ -340,7 +340,7 @@
340
340
  "name": "assertIntegratedNativeToolchain",
341
341
  "displayName": "assertIntegratedNativeToolchain()",
342
342
  "kind": "function",
343
- "signature": "assertIntegratedNativeToolchain({workspaceMode, workspaceRoot, toolchainRoot, target}={})",
343
+ "signature": "assertIntegratedNativeToolchain({workspaceMode, workspaceRoot, toolchainRoot, target, providerSource='arcane-checkout'}={})",
344
344
  "entrypoints": [
345
345
  "arcane-os",
346
346
  "arcane-os/toolchain"
@@ -540,7 +540,7 @@
540
540
  "name": "createNativeBuildPlan",
541
541
  "displayName": "createNativeBuildPlan()",
542
542
  "kind": "function",
543
- "signature": "async createNativeBuildPlan({ nativeBuilder, toolchainRoot, toolchainReceipt, appReleaseRoot, appReleaseReceipt, appDescriptor, dependencyReleases=[], providerGeneration, minimumCoreVersion, protectedRoots=[], outputRoot, targetRequest, signal, onEvent }={})",
543
+ "signature": "async createNativeBuildPlan({ nativeBuilder, toolchainRoot, toolchain, appReleaseRoot, release, appDescriptor, selectedSdk, dependencyReleases, minimumCoreVersion, protectedRoots=[], outputRoot, targetRequest, signal, onEvent }={})",
544
544
  "entrypoints": [
545
545
  "arcane-os",
546
546
  "arcane-os/native"
@@ -1037,7 +1037,7 @@
1037
1037
  "name": "loadArcaneNativeProvider",
1038
1038
  "displayName": "loadArcaneNativeProvider()",
1039
1039
  "kind": "function",
1040
- "signature": "loadArcaneNativeProvider({ arcaneRoot, target, inspect=lstat, canonicalize=realpath, readModule=readFile, importModule=specifier=>import(specifier), generationCache=providerGenerationCache, signal, onEvent }={})",
1040
+ "signature": "async loadArcaneNativeProvider({ arcaneRoot, target, inspect=lstat, canonicalize=realpath, importModule=specifier=>import(specifier), signal, onEvent }={})",
1041
1041
  "entrypoints": [
1042
1042
  "arcane-os",
1043
1043
  "arcane-os/native-provider"
@@ -3619,6 +3619,258 @@
3619
3619
  "availability": "Node and Browser",
3620
3620
  "protocol": "Shared AI cancellation",
3621
3621
  "normalization": "Preserves an existing ARCANE_AI_REQUEST_ABORTED value or returns an AbortError with that code and the supplied cause"
3622
+ },
3623
+ {
3624
+ "id": "core-contracts:CORE_PROTOCOL",
3625
+ "name": "CORE_PROTOCOL",
3626
+ "displayName": "CORE_PROTOCOL",
3627
+ "kind": "constant",
3628
+ "signature": "const CORE_PROTOCOL = 'arcane/1'",
3629
+ "entrypoints": ["arcane-os/core/contracts"],
3630
+ "primaryImport": "arcane-os/core/contracts",
3631
+ "group": "Core protocol contracts",
3632
+ "summary": "Identifies Arcane Core request, response, event and control frames.",
3633
+ "availability": "Node and browser/bundler",
3634
+ "protocol": "arcane/1",
3635
+ "normalization": "Exact protocol string; it identifies a frame contract without granting a method, service, transport or model capability"
3636
+ },
3637
+ {
3638
+ "id": "core-contracts:CORE_READY_EVENTS",
3639
+ "name": "CORE_READY_EVENTS",
3640
+ "displayName": "CORE_READY_EVENTS",
3641
+ "kind": "constant",
3642
+ "signature": "const CORE_READY_EVENTS",
3643
+ "entrypoints": ["arcane-os/core/contracts"],
3644
+ "primaryImport": "arcane-os/core/contracts",
3645
+ "group": "Core protocol contracts",
3646
+ "summary": "Lists the transport and dispatcher events that the Core client treats as durable completions.",
3647
+ "availability": "Node and browser/bundler",
3648
+ "protocol": "arcane/1 client readiness",
3649
+ "normalization": "Contains transport.ready and core.ready; neither event asserts application-service, repository or model readiness"
3650
+ },
3651
+ {
3652
+ "id": "core-contracts:CORE_FRAME_CONTRACTS",
3653
+ "name": "CORE_FRAME_CONTRACTS",
3654
+ "displayName": "CORE_FRAME_CONTRACTS",
3655
+ "kind": "constant",
3656
+ "signature": "const CORE_FRAME_CONTRACTS",
3657
+ "entrypoints": ["arcane-os/core/contracts"],
3658
+ "primaryImport": "arcane-os/core/contracts",
3659
+ "group": "Core protocol contracts",
3660
+ "summary": "Describes the public fields on Core request, response, event and cancellation frames.",
3661
+ "availability": "Node and browser/bundler",
3662
+ "protocol": "arcane/1 wire descriptions",
3663
+ "normalization": "Descriptive data only; it does not admit methods, validate application policy or create a transport"
3664
+ },
3665
+ {
3666
+ "id": "core-contracts:CORE_METHOD_CONTRACTS",
3667
+ "name": "CORE_METHOD_CONTRACTS",
3668
+ "displayName": "CORE_METHOD_CONTRACTS",
3669
+ "kind": "constant",
3670
+ "signature": "const CORE_METHOD_CONTRACTS",
3671
+ "entrypoints": ["arcane-os/core/contracts"],
3672
+ "primaryImport": "arcane-os/core/contracts",
3673
+ "group": "Core protocol contracts",
3674
+ "summary": "Describes existing Core method input, output and semantic shapes.",
3675
+ "availability": "Node and browser/bundler",
3676
+ "protocol": "arcane/1 method descriptions",
3677
+ "normalization": "Descriptive data only; the active host and its registered services remain the authority for method availability"
3678
+ },
3679
+ {
3680
+ "id": "core-contracts:CoreError",
3681
+ "name": "CoreError",
3682
+ "displayName": "CoreError",
3683
+ "kind": "class",
3684
+ "signature": "new CoreError(value)",
3685
+ "entrypoints": ["arcane-os/core/contracts"],
3686
+ "primaryImport": "arcane-os/core/contracts",
3687
+ "group": "Core protocol contracts",
3688
+ "summary": "Creates the common Core error while retaining supplied native diagnostic fields.",
3689
+ "availability": "Node and browser/bundler",
3690
+ "protocol": "arcane/1 error response",
3691
+ "normalization": "Preserves own fields, stack and cause; supplies Arcane defaults for absent name, code, message, resolution and diagnostic metadata"
3692
+ },
3693
+ {
3694
+ "id": "core-contracts:serializeCoreError",
3695
+ "name": "serializeCoreError",
3696
+ "displayName": "serializeCoreError()",
3697
+ "kind": "function",
3698
+ "signature": "serializeCoreError(error)",
3699
+ "entrypoints": ["arcane-os/core/contracts"],
3700
+ "primaryImport": "arcane-os/core/contracts",
3701
+ "group": "Core protocol contracts",
3702
+ "summary": "Projects an error into a complete plain diagnostic record for Core responses and events.",
3703
+ "availability": "Node and browser/bundler",
3704
+ "protocol": "arcane/1 error response",
3705
+ "normalization": "Retains own properties and ordinary name, message, stack and cause fields; recursively projects Error causes and AggregateError members"
3706
+ },
3707
+ {
3708
+ "id": "core-client:createCoreClient",
3709
+ "name": "createCoreClient",
3710
+ "displayName": "createCoreClient()",
3711
+ "kind": "function",
3712
+ "signature": "createCoreClient({global=globalThis,transport=null,eventOwner=arcaneEvents,eventOwnerReady,autoConnect=true,onError}={})",
3713
+ "entrypoints": ["arcane-os/core/client"],
3714
+ "primaryImport": "arcane-os/core/client",
3715
+ "group": "Core browser client",
3716
+ "summary": "Creates one correlated Arcane Core RPC client with explicit transport, readiness, events, cancellation and lifetime ownership.",
3717
+ "availability": "Browser and native WebView JavaScript hosts; custom transports require a callable send(frame)",
3718
+ "protocol": "arcane/1 over the selected host transport",
3719
+ "normalization": "Preserves complete request, result and event data; rejects invalid transports before readiness, retains FIFO handoff to the shared event owner and reports transport failures that arrive after request settlement"
3720
+ },
3721
+ {
3722
+ "id": "core-client:createCoreFacade",
3723
+ "name": "createCoreFacade",
3724
+ "displayName": "createCoreFacade()",
3725
+ "kind": "function",
3726
+ "signature": "createCoreFacade(client)",
3727
+ "entrypoints": ["arcane-os/core/client"],
3728
+ "primaryImport": "arcane-os/core/client",
3729
+ "group": "Core browser client",
3730
+ "summary": "Projects a Core client into the established application-facing Arcane namespace.",
3731
+ "availability": "Browser and native WebView JavaScript hosts with a Core client",
3732
+ "protocol": "arcane/1 compatibility facade",
3733
+ "normalization": "Routes existing namespace methods through client.invoke while retaining operation-specific parameters, correlation, streaming callbacks, timeouts and cancellation"
3734
+ },
3735
+ {
3736
+ "id": "core-client:installCoreClient",
3737
+ "name": "installCoreClient",
3738
+ "displayName": "installCoreClient()",
3739
+ "kind": "function",
3740
+ "signature": "installCoreClient(global=globalThis,options={})",
3741
+ "entrypoints": ["arcane-os/core/client"],
3742
+ "primaryImport": "arcane-os/core/client",
3743
+ "group": "Core browser client",
3744
+ "summary": "Installs one synchronous global Arcane facade and native receive callback for the selected renderer lifetime.",
3745
+ "availability": "Browser and native WebView JavaScript hosts",
3746
+ "protocol": "arcane/1 renderer facade",
3747
+ "normalization": "Repeated installation returns the same client; closing releases subscriptions, callbacks, timers and pending renderer requests without killing Core"
3748
+ },
3749
+ {
3750
+ "id": "core-classic-source:createCoreClassicSource",
3751
+ "name": "createCoreClassicSource",
3752
+ "displayName": "createCoreClassicSource()",
3753
+ "kind": "function",
3754
+ "signature": "async createCoreClassicSource({eventOwnerModuleURL}={})",
3755
+ "entrypoints": ["arcane-os/core/classic-source"],
3756
+ "primaryImport": "arcane-os/core/classic-source",
3757
+ "group": "Core classic client projection",
3758
+ "summary": "Generates the native host's classic injection script from the installed canonical Core client and contracts.",
3759
+ "availability": "Node; generated source runs in browser and native WebView renderers",
3760
+ "protocol": "arcane/1 classic-script injection",
3761
+ "normalization": "Returns the complete canonical client projection; installs synchronous facade shapes while deferring only the shared event-owner module connection when document parsing is incomplete"
3762
+ },
3763
+ {
3764
+ "id": "core-runtime:createCoreRuntime",
3765
+ "name": "createCoreRuntime",
3766
+ "displayName": "createCoreRuntime()",
3767
+ "kind": "function",
3768
+ "signature": "createCoreRuntime({application,version,services=[]}={})",
3769
+ "entrypoints": ["arcane-os/core/runtime"],
3770
+ "primaryImport": "arcane-os/core/runtime",
3771
+ "group": "Native Core runtime",
3772
+ "summary": "Creates an app-neutral Core dispatcher with explicit services, request lifetimes, events and graceful drain.",
3773
+ "availability": "Node on Windows, Linux and macOS native hosts; Android requires its host adaptation",
3774
+ "protocol": "arcane/1 dispatcher and service lifecycle",
3775
+ "normalization": "Starts services independently, preserves request correlation and complete results/errors, cancels only request-lifetime work and waits accepted service-lifetime responses before ordered service drain and disposal"
3776
+ },
3777
+ {
3778
+ "id": "core-stdio:encodeCoreFrame",
3779
+ "name": "encodeCoreFrame",
3780
+ "displayName": "encodeCoreFrame()",
3781
+ "kind": "function",
3782
+ "signature": "encodeCoreFrame(frame)",
3783
+ "entrypoints": ["arcane-os/core/stdio"],
3784
+ "primaryImport": "arcane-os/core/stdio",
3785
+ "group": "Native Core stdio transport",
3786
+ "summary": "Encodes one Core frame as UTF-8 JSON with the native Content-Length transport header.",
3787
+ "availability": "Node",
3788
+ "protocol": "Content-Length framed arcane/1 stdio",
3789
+ "normalization": "Returns a Buffer containing one transport frame; framing length remains transport-local and the JSON payload retains the supplied frame fields"
3790
+ },
3791
+ {
3792
+ "id": "core-stdio:createCoreFrameDecoder",
3793
+ "name": "createCoreFrameDecoder",
3794
+ "displayName": "createCoreFrameDecoder()",
3795
+ "kind": "function",
3796
+ "signature": "createCoreFrameDecoder(onFrame)",
3797
+ "entrypoints": ["arcane-os/core/stdio"],
3798
+ "primaryImport": "arcane-os/core/stdio",
3799
+ "group": "Native Core stdio transport",
3800
+ "summary": "Creates the incremental decoder for fragmented or consecutive native Core frames.",
3801
+ "availability": "Node",
3802
+ "protocol": "Content-Length framed arcane/1 stdio",
3803
+ "normalization": "push(chunk) delivers each complete parsed JSON value in order; finish() reports an incomplete final header or body instead of dropping it"
3804
+ },
3805
+ {
3806
+ "id": "core-stdio:startCoreStdio",
3807
+ "name": "startCoreStdio",
3808
+ "displayName": "startCoreStdio()",
3809
+ "kind": "function",
3810
+ "signature": "startCoreStdio({runtime,input=process.stdin,output=process.stdout,onError}={})",
3811
+ "entrypoints": ["arcane-os/core/stdio"],
3812
+ "primaryImport": "arcane-os/core/stdio",
3813
+ "group": "Native Core stdio transport",
3814
+ "summary": "Attaches an existing Core runtime to framed input and output with concurrent dispatch and graceful shutdown.",
3815
+ "availability": "Node with readable input and writable output streams",
3816
+ "protocol": "Content-Length framed arcane/1 stdio",
3817
+ "normalization": "Returns {runtime,closed,close}; preserves queued output order, reports parser and stream failures, drains accepted runtime work on EOF and never exits the host or ends caller-owned output"
3818
+ },
3819
+ {
3820
+ "id": "native-portable-provider:createPortableNativeProvider",
3821
+ "name": "createPortableNativeProvider",
3822
+ "displayName": "createPortableNativeProvider()",
3823
+ "kind": "function",
3824
+ "signature": "createPortableNativeProvider({services=[]}={})",
3825
+ "entrypoints": ["arcane-os/native/portable-provider"],
3826
+ "primaryImport": "arcane-os/native/portable-provider",
3827
+ "group": "Portable native provider",
3828
+ "summary": "Creates the SDK-owned provider that assembles one selected app and explicit services into a portable Core payload.",
3829
+ "availability": "Node; produces a portable payload rather than an executable host",
3830
+ "protocol": "arcane-native-builder/1 portable provider",
3831
+ "normalization": "Preserves complete selected app and dependency releases, uses explicit service module factories, reports executable:false and never substitutes for an unavailable platform host"
3832
+ },
3833
+ {
3834
+ "id": "native-portable-provider:arcaneNativeBuilderProvider",
3835
+ "name": "arcaneNativeBuilderProvider",
3836
+ "displayName": "arcaneNativeBuilderProvider",
3837
+ "kind": "singleton",
3838
+ "signature": "const arcaneNativeBuilderProvider",
3839
+ "entrypoints": ["arcane-os/native/portable-provider"],
3840
+ "primaryImport": "arcane-os/native/portable-provider",
3841
+ "group": "Portable native provider",
3842
+ "summary": "Package-owned portable provider with no preconfigured application services.",
3843
+ "availability": "Node; produces a portable payload rather than an executable host",
3844
+ "protocol": "arcane-native-builder/1 portable provider",
3845
+ "normalization": "Binding identity is exactly equal to the subpath default export; describe, doctor, prepare, build and verify retain portable semantics while run reports unsupported"
3846
+ },
3847
+ {
3848
+ "id": "native-portable-provider:default",
3849
+ "name": "default",
3850
+ "displayName": "arcaneNativeBuilderProvider default export",
3851
+ "kind": "singleton",
3852
+ "signature": "default as arcaneNativeBuilderProvider",
3853
+ "entrypoints": ["arcane-os/native/portable-provider"],
3854
+ "primaryImport": "arcane-os/native/portable-provider",
3855
+ "group": "Portable native provider",
3856
+ "summary": "Default package binding for the same portable provider exposed by arcaneNativeBuilderProvider.",
3857
+ "availability": "Node; produces a portable payload rather than an executable host",
3858
+ "protocol": "arcane-native-builder/1 portable provider",
3859
+ "normalization": "Binding identity is exactly equal to the named arcaneNativeBuilderProvider export"
3860
+ },
3861
+ {
3862
+ "id": "core-host:startCoreHost",
3863
+ "name": "startCoreHost",
3864
+ "displayName": "startCoreHost()",
3865
+ "kind": "function",
3866
+ "signature": "startCoreHost({application,version,services=[],input,output,onError,signal}={})",
3867
+ "entrypoints": ["arcane-os/core/host"],
3868
+ "primaryImport": "arcane-os/core/host",
3869
+ "group": "Native Core host composition",
3870
+ "summary": "Composes explicitly supplied application services with the shared Core runtime and stdio lifecycle.",
3871
+ "availability": "Node with readable input and writable output streams",
3872
+ "protocol": "arcane/1 over Content-Length framed stdio",
3873
+ "normalization": "Returns the existing {runtime,closed,close} transport owner; an optional abort signal invokes the same idempotent drain without killing the process, replacing service readiness or cancelling accepted service-lifetime work"
3622
3874
  }
3623
3875
  ]
3624
3876
  }