arcane-os 0.1.0-dev.5
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 +154 -0
- package/COMMERCIAL-LICENSE.md +13 -0
- package/LICENSE +661 -0
- package/NOTICE +70 -0
- package/README.md +448 -0
- package/bin/arcane-test.mjs +741 -0
- package/bin/arcane.mjs +5 -0
- package/docs/architecture.md +234 -0
- package/docs/compatibility.md +36 -0
- package/docs/event-manager.md +166 -0
- package/docs/platform-targets.md +108 -0
- package/docs/publishing.md +203 -0
- package/docs/reference/README.md +117 -0
- package/docs/reference/arcane-ollama.md +288 -0
- package/docs/reference/availability-and-normalization.md +123 -0
- package/docs/reference/behavioral-testing.md +86 -0
- package/docs/reference/cli.md +569 -0
- package/docs/reference/core/README.md +62 -0
- package/docs/reference/core/arcane-ai-contracts.md +873 -0
- package/docs/reference/core/arcane-api.md +601 -0
- package/docs/reference/core/arcane-entities.md +65 -0
- package/docs/reference/core/arcane-events.md +134 -0
- package/docs/reference/core/ollama-module.md +181 -0
- package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
- package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
- package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
- package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
- package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
- package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
- package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
- package/docs/reference/event-manager.md +957 -0
- package/docs/reference/inventory/package-api.json +2632 -0
- package/docs/reference/inventory/runtime-components.json +934 -0
- package/docs/reference/inventory/runtime-entities.json +26 -0
- package/docs/reference/inventory/runtime-modules.json +1249 -0
- package/docs/reference/protocols.md +242 -0
- package/docs/reference/runtime-components.md +1098 -0
- package/docs/reference/runtime-entities.md +303 -0
- package/docs/reference/runtime-modules.md +2010 -0
- package/docs/reference/sdk-api.md +4901 -0
- package/docs/roadmap.md +79 -0
- package/docs/work-amplification.md +124 -0
- package/node_modules/event-pubsub/CHANGELOG.md +55 -0
- package/node_modules/event-pubsub/MIGRATION.md +70 -0
- package/node_modules/event-pubsub/README.md +363 -0
- package/node_modules/event-pubsub/SECURITY.md +37 -0
- package/node_modules/event-pubsub/index.js +141 -0
- package/node_modules/event-pubsub/licence +21 -0
- package/node_modules/event-pubsub/package.json +59 -0
- package/node_modules/strong-type/README.md +408 -0
- package/node_modules/strong-type/assets/strong-type-header.png +0 -0
- package/node_modules/strong-type/index.js +1151 -0
- package/node_modules/strong-type/licence +21 -0
- package/node_modules/strong-type/node.js +125 -0
- package/node_modules/strong-type/package.json +61 -0
- package/package.json +95 -0
- package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
- package/runtime/arcane/components/app-bar.html +468 -0
- package/runtime/arcane/components/assistant-panel.html +715 -0
- package/runtime/arcane/components/calculator.html +8 -0
- package/runtime/arcane/components/chart.html +655 -0
- package/runtime/arcane/components/chat.html +1225 -0
- package/runtime/arcane/components/conversation-view.html +13 -0
- package/runtime/arcane/components/dashboard-config.html +341 -0
- package/runtime/arcane/components/data-maintenance.html +112 -0
- package/runtime/arcane/components/data-view.html +92 -0
- package/runtime/arcane/components/directory-picker.html +197 -0
- package/runtime/arcane/components/document-inspector.html +252 -0
- package/runtime/arcane/components/file-drop.html +264 -0
- package/runtime/arcane/components/file-inspector.html +293 -0
- package/runtime/arcane/components/file-manager.html +1715 -0
- package/runtime/arcane/components/header.html +142 -0
- package/runtime/arcane/components/integration-settings.html +14 -0
- package/runtime/arcane/components/local-ai-status.html +360 -0
- package/runtime/arcane/components/markdown-document.html +1048 -0
- package/runtime/arcane/components/markdown-editor.html +360 -0
- package/runtime/arcane/components/media-embed.html +8 -0
- package/runtime/arcane/components/modal.html +402 -0
- package/runtime/arcane/components/output-panel.html +259 -0
- package/runtime/arcane/components/preferences-form.html +135 -0
- package/runtime/arcane/components/record-timeline.html +105 -0
- package/runtime/arcane/components/relationship-board.html +116 -0
- package/runtime/arcane/components/screen-capture.html +8 -0
- package/runtime/arcane/components/source-code-viewer.html +441 -0
- package/runtime/arcane/components/source-explanation.html +124 -0
- package/runtime/arcane/components/speech.html +365 -0
- package/runtime/arcane/components/summary-strip.html +177 -0
- package/runtime/arcane/components/table.html +77 -0
- package/runtime/arcane/components/task-progress.html +282 -0
- package/runtime/arcane/components/terminal-workspace.html +65 -0
- package/runtime/arcane/components/theme-editor.html +41 -0
- package/runtime/arcane/components/theme-switcher.html +46 -0
- package/runtime/arcane/components/unified-inbox.html +20 -0
- package/runtime/arcane/components/voice-transcription.html +476 -0
- package/runtime/arcane/components/weather-widget.html +8 -0
- package/runtime/arcane/components/web-navigator.html +239 -0
- package/runtime/arcane/css/communications.css +1 -0
- package/runtime/arcane/css/dashboard-config.css +45 -0
- package/runtime/arcane/css/document-site.css +981 -0
- package/runtime/arcane/css/layout.css +438 -0
- package/runtime/arcane/css/primitives.css +321 -0
- package/runtime/arcane/css/theme.css +112 -0
- package/runtime/arcane/css/utility-workspace.css +1 -0
- package/runtime/arcane/entities/ApiModelRecord.js +20 -0
- package/runtime/arcane/entities/Calculation.js +13 -0
- package/runtime/arcane/entities/Chat.js +581 -0
- package/runtime/arcane/entities/CommunicationMessage.js +29 -0
- package/runtime/arcane/entities/CommunicationThread.js +21 -0
- package/runtime/arcane/entities/Document.js +10 -0
- package/runtime/arcane/entities/File.js +143 -0
- package/runtime/arcane/entities/Image.js +135 -0
- package/runtime/arcane/entities/IntentEnvelope.js +834 -0
- package/runtime/arcane/entities/Preference.js +83 -0
- package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
- package/runtime/arcane/entities/TerminalSession.js +46 -0
- package/runtime/arcane/entities/Theme.js +107 -0
- package/runtime/arcane/entities/User.js +1046 -0
- package/runtime/arcane/entities/Weather.js +23 -0
- package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
- package/runtime/arcane/img/arrow-left.png +0 -0
- package/runtime/arcane/img/arrow-right.png +0 -0
- package/runtime/arcane/img/doc.svg +5 -0
- package/runtime/arcane/img/folder.svg +4 -0
- package/runtime/arcane/img/image.svg +5 -0
- package/runtime/arcane/img/refresh.png +0 -0
- package/runtime/arcane/img/send.svg +9 -0
- package/runtime/arcane/img/trash.svg +5 -0
- package/runtime/arcane/img/upload.svg +5 -0
- package/runtime/arcane/modules/AI.js +2048 -0
- package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
- package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
- package/runtime/arcane/modules/AIResponseLength.js +42 -0
- package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
- package/runtime/arcane/modules/AnsiText.js +53 -0
- package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
- package/runtime/arcane/modules/AppDataScope.js +245 -0
- package/runtime/arcane/modules/AppearancePreferences.js +28 -0
- package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
- package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
- package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
- package/runtime/arcane/modules/AsyncBoundary.js +161 -0
- package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
- package/runtime/arcane/modules/CalculatorEngine.js +20 -0
- package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
- package/runtime/arcane/modules/ChartLibrary.js +35 -0
- package/runtime/arcane/modules/ChatRecords.js +13 -0
- package/runtime/arcane/modules/CommunicationAppController.js +43 -0
- package/runtime/arcane/modules/CommunicationHub.js +16 -0
- package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
- package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
- package/runtime/arcane/modules/ComponentContracts.js +586 -0
- package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
- package/runtime/arcane/modules/ConversationActionItems.js +488 -0
- package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
- package/runtime/arcane/modules/ConversationTimebox.js +527 -0
- package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
- package/runtime/arcane/modules/DBLS.js +171 -0
- package/runtime/arcane/modules/DBOPFS.js +1154 -0
- package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
- package/runtime/arcane/modules/DataMaintenance.js +91 -0
- package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
- package/runtime/arcane/modules/DirectoryPicker.js +109 -0
- package/runtime/arcane/modules/DocumentNavigation.js +223 -0
- package/runtime/arcane/modules/Errors.js +1025 -0
- package/runtime/arcane/modules/GifEncoder.js +29 -0
- package/runtime/arcane/modules/HTMLImport.js +114 -0
- package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
- package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
- package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
- package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
- package/runtime/arcane/modules/MD.js +111 -0
- package/runtime/arcane/modules/Mail.js +352 -0
- package/runtime/arcane/modules/MailTransport.mjs +180 -0
- package/runtime/arcane/modules/Marked.min.js +71 -0
- package/runtime/arcane/modules/MemoryRecords.js +44 -0
- package/runtime/arcane/modules/MessageAdvisory.js +38 -0
- package/runtime/arcane/modules/ModelDefinition.js +189 -0
- package/runtime/arcane/modules/Ollama.js +74 -0
- package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
- package/runtime/arcane/modules/OllamaSettings.js +24 -0
- package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
- package/runtime/arcane/modules/PreferenceStore.js +109 -0
- package/runtime/arcane/modules/QRCode.min.js +1 -0
- package/runtime/arcane/modules/Questionnaire.js +61 -0
- package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
- package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
- package/runtime/arcane/modules/RecordReviewStore.js +94 -0
- package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
- package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
- package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
- package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
- package/runtime/arcane/modules/ScreenCapture.js +20 -0
- package/runtime/arcane/modules/SpeechPlayback.js +581 -0
- package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
- package/runtime/arcane/modules/SystemAppearance.js +20 -0
- package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
- package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
- package/runtime/arcane/modules/TerminalClient.js +52 -0
- package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
- package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
- package/runtime/arcane/modules/ThemeManager.js +131 -0
- package/runtime/arcane/modules/TimeGuard.js +149 -0
- package/runtime/arcane/modules/ToolCallRouter.js +83 -0
- package/runtime/arcane/modules/WaitForComponent.js +102 -0
- package/runtime/arcane/modules/YouTubeMedia.js +16 -0
- package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
- package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
- package/runtime/arcane/modules/uPlot.min.css +1 -0
- package/runtime/arcane/security/arcane-network-policy.json +6 -0
- package/runtime/strong-type/index.js +352 -0
- package/runtime/strong-type/licence +21 -0
- package/runtime/strong-type/package.json +45 -0
- package/schemas/arcane-app-bundle.schema.json +125 -0
- package/schemas/arcane-app.schema.json +329 -0
- package/schemas/arcane-lock.schema.json +86 -0
- package/schemas/arcane-package.schema.json +224 -0
- package/schemas/cli-event.schema.json +122 -0
- package/schemas/event-stack.schema.json +152 -0
- package/schemas/native-build-plan.schema.json +176 -0
- package/schemas/target-adapter.schema.json +117 -0
- package/src/app-descriptor.mjs +500 -0
- package/src/cli/main.mjs +561 -0
- package/src/constants.mjs +31 -0
- package/src/dev-server.mjs +718 -0
- package/src/doctor.mjs +315 -0
- package/src/dom-event-instrumentation.mjs +594 -0
- package/src/errors.mjs +75 -0
- package/src/event-manager.mjs +1342 -0
- package/src/event-queue.mjs +138 -0
- package/src/events.mjs +219 -0
- package/src/index.mjs +177 -0
- package/src/integrated-provider-loader.mjs +432 -0
- package/src/native-plan.mjs +698 -0
- package/src/native-provider-loader.mjs +1126 -0
- package/src/packager/core.mjs +2691 -0
- package/src/process.mjs +353 -0
- package/src/release-bundle.mjs +2523 -0
- package/src/repository.mjs +90 -0
- package/src/runtime.mjs +452 -0
- package/src/scaffold.mjs +380 -0
- package/src/targets/index.mjs +436 -0
- package/src/templates/assets/app-icon.png +0 -0
- package/src/templates/workspace-template.mjs +388 -0
- package/src/testing-loader.mjs +9 -0
- package/src/testing.mjs +427 -0
- package/src/toolchain.mjs +1335 -0
- package/src/update-check.mjs +307 -0
- package/src/workspace.mjs +449 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Availability and normalization
|
|
2
|
+
|
|
3
|
+
Use this page to choose an API by capability. The compact labels tell you where
|
|
4
|
+
it runs; the [protocol guide](protocols.md) contains the implementation detail.
|
|
5
|
+
|
|
6
|
+
## Availability labels
|
|
7
|
+
|
|
8
|
+
| Label | Meaning |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| **Node** | Runs in the SDK's supported Node.js process. It is not a renderer API. |
|
|
11
|
+
| **Browser** | Uses standard browser APIs and can run without a native host when its own dependencies are available. |
|
|
12
|
+
| **Native** | Requires an admitted `globalThis.Arcane` host method or a native target provider. |
|
|
13
|
+
| **Cloud** | Calls a remote provider over HTTPS and needs provider configuration and network policy. |
|
|
14
|
+
| **Cross-host** | Keeps one application API while Arcane selects WebView2, WebKitGTK, Android WebView, or development HTTP transport. |
|
|
15
|
+
| **Provider-native** | Intentionally returns the underlying provider's bounded envelope instead of an Arcane-normalized entity. |
|
|
16
|
+
|
|
17
|
+
“Available” never means “authorized.” App grants, method allowlists, host
|
|
18
|
+
policy, package-owned model policy, platform support, and dependency readiness
|
|
19
|
+
are independent checks.
|
|
20
|
+
|
|
21
|
+
The current native host/target matrix covers Microsoft NT, Linux, and Android
|
|
22
|
+
where listed. It exposes no macOS target or Core host contract in this SDK
|
|
23
|
+
version; WebKitGTK availability must not be generalized to macOS.
|
|
24
|
+
|
|
25
|
+
## Capability-first matrix
|
|
26
|
+
|
|
27
|
+
| What the developer wants to do | Preferred surface | Availability | Normalization |
|
|
28
|
+
| --- | --- | --- | --- |
|
|
29
|
+
| Scaffold, inspect, test, package, bundle, build, verify, or run an app | `arcane` CLI or `arcane-os` package functions | **Node**; native targets invoke one explicit provider | CLI events and SDK errors/results are normalized by versioned SDK contracts. Native artifact receipts remain target-specific inside a common receipt lifecycle. |
|
|
30
|
+
| Publish application events or review a bounded event history | `arcane-os/event-manager` | **Node** and **Browser**; optional DOM capture needs a browser DOM or compatible host | Live listeners receive original arguments. Recorded payloads and metadata become bounded, redacted, deeply frozen `arcane-event-stack/1` snapshots. The stack format is local diagnostic data, not a host transport. |
|
|
31
|
+
| Build browser UI and app-local behavior | `/arcane/modules/*.js`, shared entities, and components | **Browser**; many modules also run inside every native renderer | Pure modules own their result contracts. Modules that call `Arcane` inherit the bridge boundary described below. |
|
|
32
|
+
| Read host identity, capabilities, storage, preferences, appearance, or platform state | `globalThis.Arcane` | **Cross-host** where the method is implemented and admitted | Promise behavior and `Arcane.Error` are normalized. Result fields are normalized unless the method explicitly documents a platform-dependent snapshot. |
|
|
33
|
+
| Use local AI without coupling app code to Ollama HTTP | `Arcane.localAI`, `Arcane.ai`, or `/arcane/modules/Ollama.js` | Primarily **Native**; Android exposes a narrower admitted inference projection | Admission, errors, and managed-operation events are normalized. Direct Ollama response envelopes remain **Provider-native**. |
|
|
34
|
+
| Use OpenAI from the renderer profile | `/arcane/modules/AI.js` | **Cloud** from an allowed browser/native renderer | High-level AI chat/text behavior is normalized by the module; raw provider diagnostics and some response detail remain provider-specific. No automatic cloud fallback is inferred from local failure. |
|
|
35
|
+
| Use local or cloud speech through one application helper | `/arcane/modules/AI.js` and `Arcane.speech` | **Browser**, **Native**, or **Cloud**, depending on the selected speech profile | The helper normalizes application-facing audio/text behavior; native and cloud request/response plumbing differs below that boundary. |
|
|
36
|
+
| Inspect or manage raw Ollama models | `Arcane.ollama` or `/arcane/modules/Ollama.js` | **Native** desktop Core for management; narrower Android inference only | Wrapper method names, errors, streaming correlation, and admission are Arcane-controlled. Direct Ollama success envelopes are intentionally provider-native. |
|
|
37
|
+
| Use native terminal, installation, user, provisioning, or machine controls | matching `Arcane.*` namespace | **Native** and app/capability restricted | Calls and errors use the common bridge contract. Platform results can be host-specific and are marked in the method guide. |
|
|
38
|
+
|
|
39
|
+
## The normalized application path
|
|
40
|
+
|
|
41
|
+
For ordinary cross-platform application code:
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
const runtime = globalThis.Arcane?.runtime?.current?.();
|
|
45
|
+
|
|
46
|
+
if (!runtime?.connected) {
|
|
47
|
+
throw new Error('Open this application through an Arcane host.');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const access = await globalThis.Arcane.capabilities.list();
|
|
51
|
+
|
|
52
|
+
if (!access.methods.includes('localAI.status')) {
|
|
53
|
+
throw new Error('This application is not admitted for local AI.');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const status = await globalThis.Arcane.localAI.status();
|
|
57
|
+
console.log(status.ready, status.models);
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
This code does not select WebView2, WebKitGTK, or an HTTP bridge. It calls one
|
|
61
|
+
Arcane API. The host chooses its transport, and Core applies the bound
|
|
62
|
+
application identity and method policy.
|
|
63
|
+
|
|
64
|
+
## Normalization levels
|
|
65
|
+
|
|
66
|
+
### Fully SDK-normalized
|
|
67
|
+
|
|
68
|
+
The Node toolchain uses `ArcaneError`, stable SDK error codes, structured
|
|
69
|
+
`arcane-cli-events/1` records, normalized target descriptors, and authenticated
|
|
70
|
+
receipt objects. Platform providers can add bounded target detail but cannot
|
|
71
|
+
silently substitute a different target or artifact kind.
|
|
72
|
+
|
|
73
|
+
The central EventManager is also host-neutral JavaScript. Its synchronous live
|
|
74
|
+
bus preserves listener argument identity, while its optional history owns a
|
|
75
|
+
separate diagnostic normalization boundary: snapshots are bounded, redacted,
|
|
76
|
+
deeply frozen, and strictly importable as `arcane-event-stack/1`. DOM
|
|
77
|
+
instrumentation adds browser diagnostics only; it does not replay browser
|
|
78
|
+
state. See [EventManager and time-travel review](event-manager.md).
|
|
79
|
+
|
|
80
|
+
### Arcane bridge-normalized
|
|
81
|
+
|
|
82
|
+
Core-backed calls return promises and reject with `Arcane.Error`. Transport
|
|
83
|
+
selection, request correlation, JSON framing, capability denial, diagnostics,
|
|
84
|
+
and public operation events are normalized at the bridge. Method data contracts
|
|
85
|
+
remain authoritative; a method that documents platform-dependent fields is not
|
|
86
|
+
silently widened into a fictional common shape.
|
|
87
|
+
|
|
88
|
+
### Helper-normalized
|
|
89
|
+
|
|
90
|
+
Renderer helpers can deliberately collapse provider detail. For example,
|
|
91
|
+
`ollama.chatText()` returns a string extracted from the final chat envelope and
|
|
92
|
+
`ollama.generateText()` returns a string extracted from the final generation
|
|
93
|
+
envelope. `ollama.readiness()` returns a frozen `{ready, version, errorCode}`
|
|
94
|
+
snapshot.
|
|
95
|
+
|
|
96
|
+
### Provider-native within an Arcane boundary
|
|
97
|
+
|
|
98
|
+
Direct `Arcane.ollama.chat()`, `generate()`, `show()`, `embed()`, and lifecycle
|
|
99
|
+
methods return bounded Ollama-compatible envelopes. Arcane still owns admission,
|
|
100
|
+
limits, error normalization, chunk correlation, and host transport, but it does
|
|
101
|
+
not rename every provider response field. Feature-detect optional Ollama fields
|
|
102
|
+
and use the high-level helpers when an application needs a smaller common
|
|
103
|
+
contract.
|
|
104
|
+
|
|
105
|
+
### Platform-dependent by design
|
|
106
|
+
|
|
107
|
+
Host service settings, machine evidence, permissions, installation state, and
|
|
108
|
+
native build artifacts can differ between Microsoft NT, Linux, Android, and a
|
|
109
|
+
development browser. Those methods provide a stable outer contract and mark
|
|
110
|
+
platform-specific fields or unsupported states. `supported: false` is a valid
|
|
111
|
+
result where documented; it is not permission to bypass the host from renderer
|
|
112
|
+
code.
|
|
113
|
+
|
|
114
|
+
## No implicit protocol or provider fallback
|
|
115
|
+
|
|
116
|
+
Arcane can expose the same method over different host transports, but it does
|
|
117
|
+
not reinterpret a failed native call as authorization to send data to a cloud
|
|
118
|
+
provider. Provider selection is explicit application/user profile state. A
|
|
119
|
+
remote or development HTTP bridge transports an admitted Arcane call; it is not
|
|
120
|
+
an automatic OpenAI fallback and does not turn a standalone browser into a
|
|
121
|
+
native host.
|
|
122
|
+
|
|
123
|
+
Deep details: [protocol selection and host boundaries](protocols.md).
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Behavioral testing
|
|
2
|
+
|
|
3
|
+
Reference completeness and runtime behavior are different gates. The SDK uses
|
|
4
|
+
both.
|
|
5
|
+
|
|
6
|
+
Completeness is bidirectional: implementation additions require documentation,
|
|
7
|
+
and documentation keys that no longer exist fail just as visibly.
|
|
8
|
+
|
|
9
|
+
## Fast contract path
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm run test:unit
|
|
13
|
+
npm run test:functional
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Unit coverage verifies schemas, descriptors, target contracts, error behavior,
|
|
17
|
+
and public reference inventories. Functional coverage exercises CLI parsing and
|
|
18
|
+
output, the development server, runtime verification, packaging, scaffolding,
|
|
19
|
+
events, and the generated documentation/site contract.
|
|
20
|
+
|
|
21
|
+
## Full development gate
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm run check
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The full check validates source policy and the exact synchronized runtime
|
|
28
|
+
manifest, then runs the non-overlapping unit, functional, integration, and
|
|
29
|
+
regression sets. It remains development evidence; it is not native artifact or
|
|
30
|
+
release acceptance.
|
|
31
|
+
|
|
32
|
+
## Behavioral coverage model
|
|
33
|
+
|
|
34
|
+
| Surface | Minimum behavior proved locally | Heavier evidence boundary |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| Package entrypoints | Every declared JavaScript export imports; documented names match; constants and synchronous validators preserve their public contracts. | None for import itself. Operations that invoke tools use the matching boundary below. |
|
|
37
|
+
| EventManager and event stacks | Live pub/sub ordering and payload identity, nested causation, immutable/redacted snapshots, strict import, bounded overflow, seek, all playback modes/lifecycle outcomes, cancellation, and DOM start/stop/privacy behavior. | Real user journeys and browser layout belong in a browser harness; event-stack review never proves that external side effects can be replayed. |
|
|
38
|
+
| CLI | Commands parse, acknowledge, select one scope, produce normalized human/JSON/NDJSON output, propagate cancellation/failure, and reject invalid cardinality. | Native build/run requires the selected real provider and host. |
|
|
39
|
+
| Browser runtime modules | Every shipped ESM module parses and its export inventory matches the catalog; pure helpers run focused success/error cases. | DOM, OPFS, media, and Web Component journeys use a browser harness. |
|
|
40
|
+
| Core bridge docs | Canonical namespace/method/event/entity inventories match their one-per-member guides and required sections. | Live Core conformance belongs in Arcane OS because Core implementation is not shipped as SDK source. |
|
|
41
|
+
| Arcane Ollama wrapper | Missing-host error, method forwarding, text/readiness normalization, unload request, and stream-option forwarding run against a deterministic fake `Arcane.ollama`. | Real managed-service, model download/create, GPU/resource admission, and service restart require an admitted Arcane host. |
|
|
42
|
+
| Native providers | Plan/provider protocol, explicit target, receipt authentication, artifact reader, and unavailable-path honesty are tested with bounded fixtures. | Exact Windows, Linux, or Android artifact verification and launch must run on that actual platform/architecture. |
|
|
43
|
+
|
|
44
|
+
## Executable examples
|
|
45
|
+
|
|
46
|
+
Examples should be safe to run repeatedly and should stop at the last boundary
|
|
47
|
+
they can honestly prove. Documentation examples that would download a model,
|
|
48
|
+
restart a service, create a user, install software, log out, delete a model, or
|
|
49
|
+
launch an external resource define a function but do not invoke it.
|
|
50
|
+
|
|
51
|
+
Behavior tests replace real authority with an explicit fake only for the public
|
|
52
|
+
client contract. They must assert the exact request sent to the fake and the
|
|
53
|
+
normalized result returned to the application. A fake provider never counts as
|
|
54
|
+
native host, artifact, installation, or model-service evidence.
|
|
55
|
+
|
|
56
|
+
## Host and normalization cases
|
|
57
|
+
|
|
58
|
+
Cross-host APIs should cover at least these cases at their owning layer:
|
|
59
|
+
|
|
60
|
+
1. standalone browser with no `Arcane` host;
|
|
61
|
+
2. development HTTP transport with normalized request/error settlement;
|
|
62
|
+
3. native transport with capability admitted;
|
|
63
|
+
4. native transport with method or capability denied;
|
|
64
|
+
5. platform-dependent `supported: false` result where documented;
|
|
65
|
+
6. provider-native success envelope passed through unchanged;
|
|
66
|
+
7. helper-normalized text/readiness result;
|
|
67
|
+
8. stream chunk correlation and late/foreign chunk rejection;
|
|
68
|
+
9. abort or timeout behavior, including whether host work can continue;
|
|
69
|
+
10. explicit provider selection with no implicit local-to-cloud fallback.
|
|
70
|
+
|
|
71
|
+
Central-event changes additionally cover the exact retention boundary:
|
|
72
|
+
`maxEvents` ordinary records plus one terminal
|
|
73
|
+
`TIME_TRAVEL_OVERFLOW_EVENT`, recording disabled, DOM observation stopped,
|
|
74
|
+
continued unrecorded live delivery, rejection when re-enabling before
|
|
75
|
+
`clearHistory()`, and strict acceptance of only a terminal overflow marker.
|
|
76
|
+
DOM cases assert that private values, credentials, sensitive attributes, URLs,
|
|
77
|
+
and markup remain redacted under every capture-option combination.
|
|
78
|
+
|
|
79
|
+
## Test ownership
|
|
80
|
+
|
|
81
|
+
The SDK owns package, CLI, synchronized renderer, documentation, and injected
|
|
82
|
+
provider-boundary behavior. Arcane OS owns live Core dispatch, native host
|
|
83
|
+
bridges, capability policy, host service adapters, and real ArcaneOllama
|
|
84
|
+
integration. A change that crosses both repositories needs focused tests at both
|
|
85
|
+
owners; copying a Core test into this package would not make the SDK the Core
|
|
86
|
+
implementation owner.
|