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.
Files changed (248) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/COMMERCIAL-LICENSE.md +13 -0
  3. package/LICENSE +661 -0
  4. package/NOTICE +70 -0
  5. package/README.md +448 -0
  6. package/bin/arcane-test.mjs +741 -0
  7. package/bin/arcane.mjs +5 -0
  8. package/docs/architecture.md +234 -0
  9. package/docs/compatibility.md +36 -0
  10. package/docs/event-manager.md +166 -0
  11. package/docs/platform-targets.md +108 -0
  12. package/docs/publishing.md +203 -0
  13. package/docs/reference/README.md +117 -0
  14. package/docs/reference/arcane-ollama.md +288 -0
  15. package/docs/reference/availability-and-normalization.md +123 -0
  16. package/docs/reference/behavioral-testing.md +86 -0
  17. package/docs/reference/cli.md +569 -0
  18. package/docs/reference/core/README.md +62 -0
  19. package/docs/reference/core/arcane-ai-contracts.md +873 -0
  20. package/docs/reference/core/arcane-api.md +601 -0
  21. package/docs/reference/core/arcane-entities.md +65 -0
  22. package/docs/reference/core/arcane-events.md +134 -0
  23. package/docs/reference/core/ollama-module.md +181 -0
  24. package/docs/reference/core/reference/arcane-api/ai-and-ollama.md +1909 -0
  25. package/docs/reference/core/reference/arcane-api/applications-terminal-capabilities.md +1057 -0
  26. package/docs/reference/core/reference/arcane-api/core-and-events.md +320 -0
  27. package/docs/reference/core/reference/arcane-api/filesystem-storage-preferences-appearance.md +610 -0
  28. package/docs/reference/core/reference/arcane-api/namespaces.md +1157 -0
  29. package/docs/reference/core/reference/arcane-api/platform-installation-users-system.md +1423 -0
  30. package/docs/reference/core/reference/arcane-api/session-provisioning-diagnostics-development.md +315 -0
  31. package/docs/reference/event-manager.md +957 -0
  32. package/docs/reference/inventory/package-api.json +2632 -0
  33. package/docs/reference/inventory/runtime-components.json +934 -0
  34. package/docs/reference/inventory/runtime-entities.json +26 -0
  35. package/docs/reference/inventory/runtime-modules.json +1249 -0
  36. package/docs/reference/protocols.md +242 -0
  37. package/docs/reference/runtime-components.md +1098 -0
  38. package/docs/reference/runtime-entities.md +303 -0
  39. package/docs/reference/runtime-modules.md +2010 -0
  40. package/docs/reference/sdk-api.md +4901 -0
  41. package/docs/roadmap.md +79 -0
  42. package/docs/work-amplification.md +124 -0
  43. package/node_modules/event-pubsub/CHANGELOG.md +55 -0
  44. package/node_modules/event-pubsub/MIGRATION.md +70 -0
  45. package/node_modules/event-pubsub/README.md +363 -0
  46. package/node_modules/event-pubsub/SECURITY.md +37 -0
  47. package/node_modules/event-pubsub/index.js +141 -0
  48. package/node_modules/event-pubsub/licence +21 -0
  49. package/node_modules/event-pubsub/package.json +59 -0
  50. package/node_modules/strong-type/README.md +408 -0
  51. package/node_modules/strong-type/assets/strong-type-header.png +0 -0
  52. package/node_modules/strong-type/index.js +1151 -0
  53. package/node_modules/strong-type/licence +21 -0
  54. package/node_modules/strong-type/node.js +125 -0
  55. package/node_modules/strong-type/package.json +61 -0
  56. package/package.json +95 -0
  57. package/runtime/ARCANE_RUNTIME_RELEASE.json +791 -0
  58. package/runtime/arcane/components/app-bar.html +468 -0
  59. package/runtime/arcane/components/assistant-panel.html +715 -0
  60. package/runtime/arcane/components/calculator.html +8 -0
  61. package/runtime/arcane/components/chart.html +655 -0
  62. package/runtime/arcane/components/chat.html +1225 -0
  63. package/runtime/arcane/components/conversation-view.html +13 -0
  64. package/runtime/arcane/components/dashboard-config.html +341 -0
  65. package/runtime/arcane/components/data-maintenance.html +112 -0
  66. package/runtime/arcane/components/data-view.html +92 -0
  67. package/runtime/arcane/components/directory-picker.html +197 -0
  68. package/runtime/arcane/components/document-inspector.html +252 -0
  69. package/runtime/arcane/components/file-drop.html +264 -0
  70. package/runtime/arcane/components/file-inspector.html +293 -0
  71. package/runtime/arcane/components/file-manager.html +1715 -0
  72. package/runtime/arcane/components/header.html +142 -0
  73. package/runtime/arcane/components/integration-settings.html +14 -0
  74. package/runtime/arcane/components/local-ai-status.html +360 -0
  75. package/runtime/arcane/components/markdown-document.html +1048 -0
  76. package/runtime/arcane/components/markdown-editor.html +360 -0
  77. package/runtime/arcane/components/media-embed.html +8 -0
  78. package/runtime/arcane/components/modal.html +402 -0
  79. package/runtime/arcane/components/output-panel.html +259 -0
  80. package/runtime/arcane/components/preferences-form.html +135 -0
  81. package/runtime/arcane/components/record-timeline.html +105 -0
  82. package/runtime/arcane/components/relationship-board.html +116 -0
  83. package/runtime/arcane/components/screen-capture.html +8 -0
  84. package/runtime/arcane/components/source-code-viewer.html +441 -0
  85. package/runtime/arcane/components/source-explanation.html +124 -0
  86. package/runtime/arcane/components/speech.html +365 -0
  87. package/runtime/arcane/components/summary-strip.html +177 -0
  88. package/runtime/arcane/components/table.html +77 -0
  89. package/runtime/arcane/components/task-progress.html +282 -0
  90. package/runtime/arcane/components/terminal-workspace.html +65 -0
  91. package/runtime/arcane/components/theme-editor.html +41 -0
  92. package/runtime/arcane/components/theme-switcher.html +46 -0
  93. package/runtime/arcane/components/unified-inbox.html +20 -0
  94. package/runtime/arcane/components/voice-transcription.html +476 -0
  95. package/runtime/arcane/components/weather-widget.html +8 -0
  96. package/runtime/arcane/components/web-navigator.html +239 -0
  97. package/runtime/arcane/css/communications.css +1 -0
  98. package/runtime/arcane/css/dashboard-config.css +45 -0
  99. package/runtime/arcane/css/document-site.css +981 -0
  100. package/runtime/arcane/css/layout.css +438 -0
  101. package/runtime/arcane/css/primitives.css +321 -0
  102. package/runtime/arcane/css/theme.css +112 -0
  103. package/runtime/arcane/css/utility-workspace.css +1 -0
  104. package/runtime/arcane/entities/ApiModelRecord.js +20 -0
  105. package/runtime/arcane/entities/Calculation.js +13 -0
  106. package/runtime/arcane/entities/Chat.js +581 -0
  107. package/runtime/arcane/entities/CommunicationMessage.js +29 -0
  108. package/runtime/arcane/entities/CommunicationThread.js +21 -0
  109. package/runtime/arcane/entities/Document.js +10 -0
  110. package/runtime/arcane/entities/File.js +143 -0
  111. package/runtime/arcane/entities/Image.js +135 -0
  112. package/runtime/arcane/entities/IntentEnvelope.js +834 -0
  113. package/runtime/arcane/entities/Preference.js +83 -0
  114. package/runtime/arcane/entities/TWiNPolicyDecision.js +1092 -0
  115. package/runtime/arcane/entities/TerminalSession.js +46 -0
  116. package/runtime/arcane/entities/Theme.js +107 -0
  117. package/runtime/arcane/entities/User.js +1046 -0
  118. package/runtime/arcane/entities/Weather.js +23 -0
  119. package/runtime/arcane/img/arcane-os-everywhere.png +0 -0
  120. package/runtime/arcane/img/arrow-left.png +0 -0
  121. package/runtime/arcane/img/arrow-right.png +0 -0
  122. package/runtime/arcane/img/doc.svg +5 -0
  123. package/runtime/arcane/img/folder.svg +4 -0
  124. package/runtime/arcane/img/image.svg +5 -0
  125. package/runtime/arcane/img/refresh.png +0 -0
  126. package/runtime/arcane/img/send.svg +9 -0
  127. package/runtime/arcane/img/trash.svg +5 -0
  128. package/runtime/arcane/img/upload.svg +5 -0
  129. package/runtime/arcane/modules/AI.js +2048 -0
  130. package/runtime/arcane/modules/AIPreferenceRuntime.js +32 -0
  131. package/runtime/arcane/modules/AIPreferenceTuple.js +92 -0
  132. package/runtime/arcane/modules/AIResponseLength.js +42 -0
  133. package/runtime/arcane/modules/AIResponseURLPolicy.js +626 -0
  134. package/runtime/arcane/modules/AnsiText.js +53 -0
  135. package/runtime/arcane/modules/ApiModelDatabase.js +25 -0
  136. package/runtime/arcane/modules/AppDataScope.js +245 -0
  137. package/runtime/arcane/modules/AppearancePreferences.js +28 -0
  138. package/runtime/arcane/modules/ArcaneCommunicationBridge.js +22 -0
  139. package/runtime/arcane/modules/ArcaneNavigationPolicy.js +135 -0
  140. package/runtime/arcane/modules/ArcaneNetworkPolicy.js +255 -0
  141. package/runtime/arcane/modules/AsyncBoundary.js +161 -0
  142. package/runtime/arcane/modules/BrowserTestSuite.js +326 -0
  143. package/runtime/arcane/modules/CalculatorEngine.js +20 -0
  144. package/runtime/arcane/modules/CaseEvidenceIndexer.js +134 -0
  145. package/runtime/arcane/modules/ChartLibrary.js +35 -0
  146. package/runtime/arcane/modules/ChatRecords.js +13 -0
  147. package/runtime/arcane/modules/CommunicationAppController.js +43 -0
  148. package/runtime/arcane/modules/CommunicationHub.js +16 -0
  149. package/runtime/arcane/modules/CommunicationPreferences.js +13 -0
  150. package/runtime/arcane/modules/CommunicationProviderRegistry.js +16 -0
  151. package/runtime/arcane/modules/ComponentContracts.js +586 -0
  152. package/runtime/arcane/modules/ConfiguredAIChatSession.js +288 -0
  153. package/runtime/arcane/modules/ConversationActionItems.js +488 -0
  154. package/runtime/arcane/modules/ConversationClosingReport.js +274 -0
  155. package/runtime/arcane/modules/ConversationTimebox.js +527 -0
  156. package/runtime/arcane/modules/CoreLocalModelCatalog.js +255 -0
  157. package/runtime/arcane/modules/DBLS.js +171 -0
  158. package/runtime/arcane/modules/DBOPFS.js +1154 -0
  159. package/runtime/arcane/modules/DBOPFSWorker.js +116 -0
  160. package/runtime/arcane/modules/DataMaintenance.js +91 -0
  161. package/runtime/arcane/modules/DevelopmentWorkspace.js +74 -0
  162. package/runtime/arcane/modules/DirectoryPicker.js +109 -0
  163. package/runtime/arcane/modules/DocumentNavigation.js +223 -0
  164. package/runtime/arcane/modules/Errors.js +1025 -0
  165. package/runtime/arcane/modules/GifEncoder.js +29 -0
  166. package/runtime/arcane/modules/HTMLImport.js +114 -0
  167. package/runtime/arcane/modules/InMemoryCommunicationProvider.js +14 -0
  168. package/runtime/arcane/modules/IsolatedModelQuestionRunner.js +275 -0
  169. package/runtime/arcane/modules/LocalAIReadiness.js +870 -0
  170. package/runtime/arcane/modules/LocalAIReadinessController.js +156 -0
  171. package/runtime/arcane/modules/MD.js +111 -0
  172. package/runtime/arcane/modules/Mail.js +352 -0
  173. package/runtime/arcane/modules/MailTransport.mjs +180 -0
  174. package/runtime/arcane/modules/Marked.min.js +71 -0
  175. package/runtime/arcane/modules/MemoryRecords.js +44 -0
  176. package/runtime/arcane/modules/MessageAdvisory.js +38 -0
  177. package/runtime/arcane/modules/ModelDefinition.js +189 -0
  178. package/runtime/arcane/modules/Ollama.js +74 -0
  179. package/runtime/arcane/modules/OllamaModelIdentifier.js +21 -0
  180. package/runtime/arcane/modules/OllamaSettings.js +24 -0
  181. package/runtime/arcane/modules/OpenMeteoWeatherProvider.js +14 -0
  182. package/runtime/arcane/modules/PreferenceStore.js +109 -0
  183. package/runtime/arcane/modules/QRCode.min.js +1 -0
  184. package/runtime/arcane/modules/Questionnaire.js +61 -0
  185. package/runtime/arcane/modules/RecordLinkIndex.js +24 -0
  186. package/runtime/arcane/modules/RecordPassageIndex.js +222 -0
  187. package/runtime/arcane/modules/RecordReviewStore.js +94 -0
  188. package/runtime/arcane/modules/RevocableProjectionLedger.js +1623 -0
  189. package/runtime/arcane/modules/RiskSignalAnalyzer.js +37 -0
  190. package/runtime/arcane/modules/ScamRiskPolicy.js +62 -0
  191. package/runtime/arcane/modules/ScopedOPFSCache.js +183 -0
  192. package/runtime/arcane/modules/ScreenCapture.js +20 -0
  193. package/runtime/arcane/modules/SpeechPlayback.js +581 -0
  194. package/runtime/arcane/modules/StaticDocumentCatalog.js +1248 -0
  195. package/runtime/arcane/modules/SystemAppearance.js +20 -0
  196. package/runtime/arcane/modules/SystemPlatformPresentation.js +51 -0
  197. package/runtime/arcane/modules/SystemToolRegistry.js +28 -0
  198. package/runtime/arcane/modules/TerminalClient.js +52 -0
  199. package/runtime/arcane/modules/TerminalCommandRegistry.js +50 -0
  200. package/runtime/arcane/modules/ThemeBootstrap.js +26 -0
  201. package/runtime/arcane/modules/ThemeManager.js +131 -0
  202. package/runtime/arcane/modules/TimeGuard.js +149 -0
  203. package/runtime/arcane/modules/ToolCallRouter.js +83 -0
  204. package/runtime/arcane/modules/WaitForComponent.js +102 -0
  205. package/runtime/arcane/modules/YouTubeMedia.js +16 -0
  206. package/runtime/arcane/modules/uPlot.LICENSE.txt +21 -0
  207. package/runtime/arcane/modules/uPlot.iife.min.js +2 -0
  208. package/runtime/arcane/modules/uPlot.min.css +1 -0
  209. package/runtime/arcane/security/arcane-network-policy.json +6 -0
  210. package/runtime/strong-type/index.js +352 -0
  211. package/runtime/strong-type/licence +21 -0
  212. package/runtime/strong-type/package.json +45 -0
  213. package/schemas/arcane-app-bundle.schema.json +125 -0
  214. package/schemas/arcane-app.schema.json +329 -0
  215. package/schemas/arcane-lock.schema.json +86 -0
  216. package/schemas/arcane-package.schema.json +224 -0
  217. package/schemas/cli-event.schema.json +122 -0
  218. package/schemas/event-stack.schema.json +152 -0
  219. package/schemas/native-build-plan.schema.json +176 -0
  220. package/schemas/target-adapter.schema.json +117 -0
  221. package/src/app-descriptor.mjs +500 -0
  222. package/src/cli/main.mjs +561 -0
  223. package/src/constants.mjs +31 -0
  224. package/src/dev-server.mjs +718 -0
  225. package/src/doctor.mjs +315 -0
  226. package/src/dom-event-instrumentation.mjs +594 -0
  227. package/src/errors.mjs +75 -0
  228. package/src/event-manager.mjs +1342 -0
  229. package/src/event-queue.mjs +138 -0
  230. package/src/events.mjs +219 -0
  231. package/src/index.mjs +177 -0
  232. package/src/integrated-provider-loader.mjs +432 -0
  233. package/src/native-plan.mjs +698 -0
  234. package/src/native-provider-loader.mjs +1126 -0
  235. package/src/packager/core.mjs +2691 -0
  236. package/src/process.mjs +353 -0
  237. package/src/release-bundle.mjs +2523 -0
  238. package/src/repository.mjs +90 -0
  239. package/src/runtime.mjs +452 -0
  240. package/src/scaffold.mjs +380 -0
  241. package/src/targets/index.mjs +436 -0
  242. package/src/templates/assets/app-icon.png +0 -0
  243. package/src/templates/workspace-template.mjs +388 -0
  244. package/src/testing-loader.mjs +9 -0
  245. package/src/testing.mjs +427 -0
  246. package/src/toolchain.mjs +1335 -0
  247. package/src/update-check.mjs +307 -0
  248. package/src/workspace.mjs +449 -0
@@ -0,0 +1,303 @@
1
+ # Arcane runtime entity modules
2
+
3
+ The synchronized runtime ships 15 entity modules with 35 public ESM bindings.
4
+ This page explains each module's capability and host assumptions. The exact
5
+ constructor/function/value contracts are canonical in the
6
+ [Arcane shared entity inventory](core/arcane-entities.md).
7
+
8
+ Entity creation and serialization are usually cross-host. Methods that touch
9
+ DOM, DBOPFS, local storage, AI, or object URLs require the corresponding browser
10
+ or native-WebView dependency.
11
+
12
+ ## Canonical inventory
13
+
14
+ | Module | Exports | Capability | Availability / normalization |
15
+ | --- | --- | --- | --- |
16
+ | `ApiModelRecord.js` | `default` | Frozen HTTP(S) model response snapshot. | Cross-host; normalized. |
17
+ | `Calculation.js` | `default` | Frozen bounded expression and finite result. | Cross-host; normalized. |
18
+ | `Chat.js` | `default` | Conversation messages, tool exchanges, memories, and optional persistence. | Browser/native WebView; AI/DBOPFS behavior mixed. |
19
+ | `CommunicationMessage.js` | `default`, `communicationChannels` | Frozen provider-neutral message. | Cross-host; normalized. |
20
+ | `CommunicationThread.js` | `default` | Frozen provider-neutral thread containing normalized messages. | Cross-host; normalized. |
21
+ | `Document.js` | `default` | File entity specialization for the `documents` table. | Browser/native WebView; DBOPFS behavior mixed. |
22
+ | `File.js` | `default` | MIME-aware file open/save and DBOPFS persistence. | Browser/native WebView; mixed storage/rendering errors. |
23
+ | `Image.js` | `default` | Image validation, upload, persistence, data URL, Blob URL, and revocation. | Browser/native WebView; mixed File/Blob/DBOPFS errors. |
24
+ | `IntentEnvelope.js` | six named exports | Immutable canonical intent record, serialization, rehydration, and privacy-safe audit projection. | Cross-host; strict normalized coded errors. |
25
+ | `Preference.js` | `default`, `preferenceSchema` | Boolean, number, select, and text preference definitions. | Cross-host; normalized. |
26
+ | `TerminalSession.js` | `default`, `terminalShells` | Frozen terminal session identity, shell, and state. | Cross-host; normalized. |
27
+ | `Theme.js` | five exports | Semantic theme tokens, conversion, serialization, and DOM application. | Values cross-host; apply/clear need DOM; normalized/mixed. |
28
+ | `TWiNPolicyDecision.js` | six named exports | Immutable canonical policy decision, rehydration, serialization, and redacted audit projection. | Cross-host; strict normalized coded errors. |
29
+ | `User.js` | `default` | User preferences/profile state with DBLS/DBOPFS lifecycle. | Browser/native WebView; storage behavior mixed. |
30
+ | `Weather.js` | four classes | Frozen location, observation, day, and snapshot weather entities. | Cross-host; normalized. |
31
+
32
+ ## ApiModelRecord.js
33
+
34
+ ### Overview
35
+
36
+ `ApiModelRecord` freezes an endpoint, fetch time, metadata, and parsed value so
37
+ provider reads can be cached or emitted without leaking mutable response state.
38
+
39
+ ### Example
40
+
41
+ ```javascript
42
+ import ApiModelRecord from '/arcane/entities/ApiModelRecord.js';
43
+
44
+ const record = new ApiModelRecord({
45
+ endpoint: 'https://example.invalid/model',
46
+ fetchedAt: new Date().toISOString(),
47
+ metadata: {},
48
+ value: {ready: true}
49
+ });
50
+ ```
51
+
52
+ ## Calculation.js
53
+
54
+ ### Overview
55
+
56
+ `Calculation` owns a bounded expression, finite result, creation time, and
57
+ `toJSON()` projection. Use `CalculatorEngine` to produce validated instances.
58
+
59
+ ### Example
60
+
61
+ ```javascript
62
+ import Calculation from '/arcane/entities/Calculation.js';
63
+
64
+ console.log(new Calculation({expression: '2 + 2', result: 4}).toJSON());
65
+ ```
66
+
67
+ ## Chat.js
68
+
69
+ ### Overview
70
+
71
+ `ChatEntity` owns message history, saved state, tool exchanges, memory lookup,
72
+ and optional app-scoped DBOPFS persistence. It installs no independent native
73
+ authority; AI and storage dependencies must be available to the host.
74
+
75
+ ### Example
76
+
77
+ ```javascript
78
+ import Chat from '/arcane/entities/Chat.js';
79
+
80
+ const chat = new Chat();
81
+ chat.addUserMessage('Hello.');
82
+ ```
83
+
84
+ ## CommunicationMessage.js
85
+
86
+ ### Overview
87
+
88
+ Normalizes one provider message and exports the supported channel values:
89
+ email, SMS, MMS, RCS, WhatsApp, and other.
90
+
91
+ ### Example
92
+
93
+ ```javascript
94
+ import CommunicationMessage from '/arcane/entities/CommunicationMessage.js';
95
+
96
+ const message = new CommunicationMessage({
97
+ id: 'message-1',
98
+ channel: 'email',
99
+ body: 'Hello'
100
+ });
101
+ ```
102
+
103
+ ## CommunicationThread.js
104
+
105
+ ### Overview
106
+
107
+ Normalizes one conversation thread and its `CommunicationMessage` records into
108
+ a frozen provider-neutral object.
109
+
110
+ ### Example
111
+
112
+ ```javascript
113
+ import CommunicationThread from '/arcane/entities/CommunicationThread.js';
114
+
115
+ const thread = new CommunicationThread({id: 'thread-1', messages: []});
116
+ ```
117
+
118
+ ## Document.js
119
+
120
+ ### Overview
121
+
122
+ `DocumentEntity` specializes `FileEntity` for the app-scoped `documents` table.
123
+ Its persistence methods require the same DBOPFS lifecycle and ownership proof as
124
+ the base file entity.
125
+
126
+ ### Example
127
+
128
+ ```javascript
129
+ import DocumentEntity from '/arcane/entities/Document.js';
130
+
131
+ const document = new DocumentEntity();
132
+ console.log(document.tableName);
133
+ ```
134
+
135
+ ## File.js
136
+
137
+ ### Overview
138
+
139
+ `FileEntity` loads and saves supported file formats through app-scoped DBOPFS
140
+ and uses the shared Markdown renderer where appropriate.
141
+
142
+ ### Example
143
+
144
+ ```javascript
145
+ import FileEntity from '/arcane/entities/File.js';
146
+
147
+ const file = new FileEntity();
148
+ console.log(file.fileName);
149
+ ```
150
+
151
+ ## Image.js
152
+
153
+ ### Overview
154
+
155
+ `ImageEntity` extends `FileEntity` with image validation, upload, base64 data
156
+ URLs, Blob URLs, and explicit Blob URL revocation.
157
+
158
+ ### Example
159
+
160
+ ```javascript
161
+ import ImageEntity from '/arcane/entities/Image.js';
162
+
163
+ console.log(typeof ImageEntity.prototype.revokeBlobURL);
164
+ ```
165
+
166
+ ## IntentEnvelope.js
167
+
168
+ ### Overview
169
+
170
+ Creates immutable canonical v1 intent records while keeping trusted provenance
171
+ separate from hostile payload input. Serialization, rehydration, and the audit
172
+ projection are bounded and deterministic.
173
+
174
+ ### Example
175
+
176
+ ```javascript
177
+ import {
178
+ createIntentEnvelope,
179
+ serializeIntentEnvelope
180
+ } from '/arcane/entities/IntentEnvelope.js';
181
+
182
+ const intent = createIntentEnvelope(
183
+ {originalExpression: 'Summarize the record.', normalizedGoal: 'summarize'},
184
+ {source: 'example'}
185
+ );
186
+
187
+ console.log(serializeIntentEnvelope(intent));
188
+ ```
189
+
190
+ ## Preference.js
191
+
192
+ ### Overview
193
+
194
+ Defines preference types, option normalization, value validation, JSON
195
+ projection, and schema normalization for shared stores and forms.
196
+
197
+ ### Example
198
+
199
+ ```javascript
200
+ import Preference from '/arcane/entities/Preference.js';
201
+
202
+ const preference = new Preference({
203
+ key: 'density',
204
+ type: 'select',
205
+ defaultValue: 'comfortable',
206
+ options: ['comfortable', 'compact']
207
+ });
208
+ ```
209
+
210
+ ## TerminalSession.js
211
+
212
+ ### Overview
213
+
214
+ Normalizes terminal session id, shell, state, updates, and JSON projection. The
215
+ entity does not start a process; `TerminalClient` owns the native bridge call.
216
+
217
+ ### Example
218
+
219
+ ```javascript
220
+ import TerminalSession from '/arcane/entities/TerminalSession.js';
221
+
222
+ console.log(TerminalSession.shell('auto'));
223
+ ```
224
+
225
+ ## Theme.js
226
+
227
+ ### Overview
228
+
229
+ Owns the shared light/dark semantic token sets, color conversion, JSON
230
+ projection, DOM application, and clearing. Token work is cross-host; `apply()`
231
+ and `clear()` require a document root.
232
+
233
+ ### Example
234
+
235
+ ```javascript
236
+ import Theme, {arcaneDarkThemeTokens} from '/arcane/entities/Theme.js';
237
+
238
+ const theme = new Theme({name: 'example', tokens: arcaneDarkThemeTokens});
239
+ console.log(theme.toJSON());
240
+ ```
241
+
242
+ ## TWiNPolicyDecision.js
243
+
244
+ ### Overview
245
+
246
+ Creates immutable canonical v1 policy decisions with trusted provenance,
247
+ bounded serialization, rehydration, and a target/value-redacted audit view.
248
+
249
+ ### Example
250
+
251
+ ```javascript
252
+ import {
253
+ createTWiNPolicyDecision,
254
+ twinPolicyDecisionAuditProjection
255
+ } from '/arcane/entities/TWiNPolicyDecision.js';
256
+
257
+ const decision = createTWiNPolicyDecision(
258
+ {layer: 'application', policy: 'example', outcome: 'allow'},
259
+ {source: 'example'}
260
+ );
261
+
262
+ console.log(twinPolicyDecisionAuditProjection(decision));
263
+ ```
264
+
265
+ ## User.js
266
+
267
+ ### Overview
268
+
269
+ Owns persisted user preference/profile fields, explicit-preference updates,
270
+ fresh reads, saves, and JSON projection. It installs `window.user` after its
271
+ DBLS/DBOPFS lifecycle and emits `user-entity-loaded`.
272
+
273
+ ### Example
274
+
275
+ ```javascript
276
+ import UserEntity from '/arcane/entities/User.js';
277
+
278
+ console.log(typeof UserEntity.prototype.toJSON);
279
+ ```
280
+
281
+ ## Weather.js
282
+
283
+ ### Overview
284
+
285
+ Exports four frozen normalized records: `WeatherLocation`,
286
+ `WeatherObservation`, `WeatherDay`, and `WeatherSnapshot`.
287
+
288
+ ### Example
289
+
290
+ ```javascript
291
+ import {WeatherLocation} from '/arcane/entities/Weather.js';
292
+
293
+ const location = new WeatherLocation({name: 'Houston'});
294
+ console.log(location.toJSON());
295
+ ```
296
+
297
+ ## Availability and protocol details
298
+
299
+ Entity modules are delivered by browser ESM at `/arcane/entities/`. They do not
300
+ cross Core by being imported. Individual persistence, AI, DOM, or native calls
301
+ cross the dependency named by that entity. See
302
+ [availability and normalization](availability-and-normalization.md) and the
303
+ [deep protocol guide](protocols.md).